我有大量的文本文档,我想循环浏览并在文章标题和单词出现次数的简单数据框中输出这些文档中特定单词的数量。但是我的输出数据框显然是不正确的。我怀疑我在用代码做些愚蠢的事情。任何人都可以帮助您确定问题吗?
我使用glob包收集文章,然后使用count函数遍历它们。但是,我的输出却给了我明显错误的答案,例如在非常大的文档中出现诸如“ we”之类的简单事物时,计数为“ 1”或“ 0”。
import glob
articles = glob.glob('Test/*.txt')
we_dict = {}
for article in articles:
we_dict[article] = article.count("we")
we = pd.DataFrame.from_dict(we_dict, orient='index', dtype=None)
没有产生错误消息,因此代码正在执行某些操作-产生了数据帧。但是输出的计数值应该是数百个而不是小数,例如0、1、2。
编辑:
非常有用的回复为以后的读者提供相同的查询版本。我确信代码可以有所简化。
import glob
import re
articles = glob.glob('Test/*.txt')
we_dict = {}
for article in articles:
with open(article, 'r', encoding="utf8") as art:
a = art.read()
a = a.lower()
we_dict[article] = sum(1 for match in re.finditer(r"\bwe\b", a))
we = pd.DataFrame.from_dict(we_dict, orient='index', dtype=None)
最佳答案
现在,您的代码正在遍历文章列表,并声明article
作为文件名。 we_dict[article] = article.count("we")
行实际上是在获取您的文件名,并试图在名称本身中找到单词“ we”!因此,您需要做的是使用filename
打开文件,然后读取各行。
解决此问题的一种可能方法是将所有文件读入词典,然后用单词数来遍历该字典。可能是这样的:
import glob
import pandas as pd
articles = glob.glob('*.txt')
txt_files = {}
word = 'cupcakes'
for article in articles:
with open(article, 'r') as file:
txt_files[article] = file.read().splitlines().count(word)
my_word = pd.DataFrame.from_dict(txt_files, orient='index')