计算文本Python中每个单词的出现次数

2024-04-24 13:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道我可以在文本/数组中找到一个单词:

if word in text: 
   print 'success'

我想做的是读一篇文章中的一个单词,并不断地数数找到这个单词的次数(这是一个简单的计数器任务)。但问题是我真的不知道如何去读那些已经读过的单词。最后:统计每个单词出现的次数?在

我曾考虑过在数组中保存(或者甚至是多维数组,所以保存单词和它出现的次数,或者保存在两个数组中),每次它在数组中出现一个单词时求和1。在

所以,当我读一个单词的时候,我能不能不读一些类似的东西:

^{pr2}$

Tags: textin文本if文章计数器数组单词
3条回答

我会使用以下方法之一:

1)如果单词不包含空格,但文本包含空格,则使用

for piece in text.split(" "):
   ...

那么你的单词应该在每一块中最多出现一次,并且要正确计数。例如,如果您想在“Baden-Baden”中数两次“Baden”,则此操作失败。在

2)使用字符串方法'find'不仅可以得到单词是否在那里,还可以得到它在哪里。数一数,然后从那一点继续搜索。 文本.查找(word)返回位置或-1。在

我的理解是,你想让单词一直读下去,这样当你遇到一个新单词时,你就可以发现。可以吗?最简单的解决方案是使用集合,因为它会自动删除重复项。例如:

known_words = set()
for word in text:
    if word not in known_words:
        print 'found new word:', word
    known_word.add(word)

另一方面,如果您需要每个单词的确切出现次数(在数学中称为“直方图”),则必须用字典替换该集合:

^{2}$

注意:在这两个解决方案中,我假设文本包含一个iterable结构的单词。正如其他评论所说,str.split()对此并不完全安全。在

既然我们已经确定了你想要达到的目标,我可以给你一个答案。现在你要做的第一件事就是把文本转换成单词列表。虽然split方法看起来似乎是一个好的解决方案,但当句子以一个单词结尾,后跟一个句号、逗号或任何其他字符时,它将在实际计数中造成问题。所以这个问题的一个好的解决方案是NLTK。假设您的文本存储在一个名为text的变量中。您要查找的代码如下所示:

from itertools import chain
from collections import Counter
from nltk.tokenize import sent_tokenize, word_tokenize

text = "This is an example text. Let us use two sentences, so that it is more logical."
wordlist = list(chain(*[word_tokenize(s) for s in sent_tokenize(text)]))
print(Counter(wordlist))
# Counter({'.': 2, 'is': 2, 'us': 1, 'more': 1, ',': 1, 'sentences': 1, 'so': 1, 'This': 1, 'an': 1, 'two': 1, 'it': 1, 'example': 1, 'text': 1, 'logical': 1, 'Let': 1, 'that': 1, 'use': 1})

相关问题 更多 >