【发布时间】:2019-11-04 21:57:23
【问题描述】:
我有大量文本文档,我想循环并在文章标题和单词出现计数的简单数据框中输出这些文档中特定单词的计数。但是我的输出数据框显然不正确。我怀疑我对代码做了一些愚蠢的事情。任何人都可以帮助确定问题吗?
我使用 glob 包收集文章,然后使用计数函数遍历它们。然而,我的输出给了我明显错误的答案,例如在非常大的文档中出现“我们”这样的简单事物的计数为“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")这行实际上是在获取您的文件名并试图在名称本身中找到“我们”这个词!因此,您需要做的是使用filename打开文件,然后阅读这些行,边走边搜索。 -
天哪,我真的为此感到很尴尬。但也非常感谢你们!
-
谨防误报。目前,您将计算每次出现的
'we',即使是其他单词的子字符串,例如'were'。考虑使用来自re模块的正则表达式。 -
谢谢,我在几分钟前才发现!已使用工作答案更新了问题,该答案已经过双重检查,以便为将来遇到相同问题的任何用户手动计数样本文件。