【问题标题】:Having a problem counting word occurrences in a collection of text documents在文本文档集合中计算单词出现次数时遇到问题
【发布时间】: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 模块的正则表达式。
  • 谢谢,我在几分钟前才发现!已使用工作答案更新了问题,该答案已经过双重检查,以便为将来遇到相同问题的任何用户手动计数样本文件。

标签: python text count


【解决方案1】:

现在,您的代码正在遍历您的文章列表并将article 声明为文件名。 we_dict[article] = article.count("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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多