不可用的类型'列表' - 字数

时间:2015-03-11 05:55:35

标签: python regex nltk word-count gensim

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'

有什么建议吗?

3 个答案:

答案 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)]