我只需要按照这篇文章的标题所说的去做:编写一个 python 程序,返回在文本中至少出现 5 次的所有单词。我意识到这是一个非常简单的问题。我是一名新手程序员,试图学习一些 NLP 技能,但由于某种原因我无法弄清楚这一点。您的帮助将不胜感激!
谢谢!
您应该定义“单词”是什么意思。不同的定义会产生不同的结果。通用模板为:
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))
作为第一步,你如何使用 str.split() 标记字符串。然后,使用 for 循环遍历结果数组,执行以下操作:如果单词不包含在字典的键集中,则将其添加到字典中,存储其计数,在本例中为 1。否则,单词已经包含,在字典中查找它的计数,增加计数,然后将其推回字典。最后,当你数完单词后,翻阅字典,只保留计数为 5 或更多的内容。
几分钟的谷歌搜索就会把你nltk
和FreqDist
班级指出来。
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]