corpus = PlaintextCorpusReader("path",'.*',encoding="latin1")
docs = [corpus.words(f)for f in corpus.fileids()]
docs2 = [[w.lower()for w in doc]for doc in docs]
docs3 = [[w for w in doc if re.search('^[a-z]+$', w)]for doc in docs2]
from nltk.corpus import stopwords
stop_list = stopwords.words('english')
docs4 = [[w for w in doc if w not in stop_list]for doc in docs3]
我编写了以下代码,它读取了一组文件。由此我已经做了一些预处理步骤,删除标点符号,停用词等。我现在想要执行单词计数并找到文本中使用的最频繁的单词。我使用下面的代码来做到这一点。 对于docs4中的单词:
if word in word_counter:
word_counter[word] += 1
else:
word_counter[word] = 1
popular_words = sorted(word_counter, key = word_counter.get, reverse = True)
但是我收到以下错误。 -
Traceback (most recent call last):
File "C:/Users/rohanhm.2014/PycharmProjects/untitled1/bp.py", line 18, in <module>
if word in word_counter:
TypeError: unhashable type: 'list'
有什么建议吗?
答案 0 :(得分:0)
我认为&#39;字&#39;是列表类型。 也许你通过使用一个只包含一个字符串的列表来犯错,但你认为它是一个字符串类型。
答案 1 :(得分:0)
因为你的word_counter是一个多列表,它是不可用的。你可以写这个
from itertools import chain
print list(chain(*l))
答案 2 :(得分:0)
有一种方便的方法可以确定nltk中文本的流行词。
>>> import nltk
>>> words = ['a','b','a','a','b','c','d']
>>> fd = nltk.FreqDist(words)
>>> fd.most_common(3)
[('a', 3), ('b', 2), ('c', 1)]