3

我只需要按照这篇文章的标题所说的去做:编写一个 python 程序,返回在文本中至少出现 5 次的所有单词。我意识到这是一个非常简单的问题。我是一名新手程序员,试图学习一些 NLP 技能,但由于某种原因我无法弄清楚这一点。您的帮助将不胜感激!

谢谢!

4

3 回答 3

4

您应该定义“单词”是什么意思。不同的定义会产生不同的结果。通用模板为:

from collections import Counter

count = Counter(getwords(normalize(text)))
words = [w for w, c in count.items() if c >= 5]

您可以在哪里使用 的各种定义getwords()normalize()例如:

import re

def normalize(text): # remove non-ascii, convert to lowercase
    return text.encode('ascii', 'ignore').lower().decode()

def getwords(text): # allow only a-z
    return re.findall(ur"[a-z]+", text)

或基于 nltk 的标记器:

from nltk.tokenize import sent_tokenize, word_tokenize

def getwords(text):
    return (w for sent in sent_tokenizer(text) for w in word_tokenize(sent))
于 2013-01-06T06:18:47.707 回答
3

作为第一步,你如何使用 str.split() 标记字符串。然后,使用 for 循环遍历结果数组,执行以下操作:如果单词不包含在字典的键集中,则将其添加到字典中,存储其计数,在本例中为 1。否则,单词已经包含,在字典中查找它的计数,增加计数,然后将其推回字典。最后,当你数完单词后,翻阅字典,只保留计数为 5 或更多的内容。

于 2013-01-06T05:25:53.443 回答
0

几分钟的谷歌搜索就会把你nltkFreqDist班级指出来。

import nltk
words = nltk.word_tokenize(text)
freq1 = nltk.FreqDist(words)
words_above_five_times = [w for w in freq1.keys() if freq1[w] >= 5]
于 2013-01-06T05:56:16.357 回答