我只需要做这篇文章的标题所说的:编写一个python程序,返回文本中出现至少5次的所有单词。我意识到这是一个非常简单的问题。我是一个新手程序员,试图学习一些NLP技能,但由于某些原因,我无法弄清楚这一点。您的帮助将不胜感激!
谢谢!
发布于 2013-01-06 14:18:48
你应该定义你所说的“单词”是什么意思。不同的定义会产生不同的结果。通用模板为:
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-06 13:25:53
作为第一步,使用str.split()对字符串进行标记如何?然后,使用for循环遍历结果数组,执行以下操作:如果单词不包含在字典的键集中,则将其添加到字典中,存储其计数,在本例中为1。否则,该单词已经包含,在字典中查找其计数,递增计数,然后将其推回到字典中。最后,当你数完单词后,去查字典,只记住那些计数为5或更多的单词。
发布于 2013-01-06 13:56:16
谷歌几分钟就会让你找到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]https://stackoverflow.com/questions/14179543
复制相似问题