我正在尝试使用Python获取一组文档的频率分布。我的代码由于某种原因无法正常工作并产生此错误:
Traceback (most recent call last):
File "C:\Documents and Settings\aschein\Desktop\freqdist", line 32, in <module>
fd = FreqDist(corpus_text)
File "C:\Python26\lib\site-packages\nltk\probability.py", line 104, in __init__
self.update(samples)
File "C:\Python26\lib\site-packages\nltk\probability.py", line 472, in update
self.inc(sample, count=count)
File "C:\Python26\lib\site-packages\nltk\probability.py", line 120, in inc
self[sample] = self.get(sample,0) + count
TypeError: unhashable type: 'list'
你能帮忙吗?
这是到目前为止的代码:
import os
import nltk
from nltk.probability import FreqDist
#The stop=words list
stopwords_doc = open("C:\\Documents and Settings\\aschein\\My Documents\\stopwords.txt").read()
stopwords_list = stopwords_doc.split()
stopwords = nltk.Text(stopwords_list)
corpus = []
#Directory of documents
directory = "C:\\Documents and Settings\\aschein\\My Documents\\comments"
listing = os.listdir(directory)
#Append all documents in directory into a single 'document' (list)
for doc in listing:
doc_name = "C:\\Documents and Settings\\aschein\\My Documents\\comments\\" + doc
input = open(doc_name).read()
input = input.split()
corpus.append(input)
#Turn list into Text form for NLTK
corpus_text = nltk.Text(corpus)
#Remove stop-words
for w in corpus_text:
if w in stopwords:
corpus_text.remove(w)
fd = FreqDist(corpus_text)
答案 0 :(得分:2)
我希望至少有两个想法可以回答。
首先,nltk.text.Text()方法的文档说明(强调我的):
一系列简单(字符串)标记的包装,旨在支持文本的初始探索(通过交互式控制台)。其方法对文本的上下文(例如,计数,协调,并置发现)执行各种分析,并显示结果。 如果您希望编写一个使用这些分析的程序,那么您应该绕过Text类,并直接使用相应的分析函数或类。
所以我不确定Text()是你想要处理这些数据的方式。在我看来,你可以使用列表。
其次,我要提醒你考虑一下你要求NLTK在这里执行的计算。在确定频率分布之前删除停用词意味着您的频率会偏斜;我不明白为什么在制表之前删除了停用词,而不是在事后检查分布时忽略了。 (我认为第二点会比答案的一部分做出更好的查询/评论,但我觉得值得指出比例会有所偏差。)根据您打算使用的频率分布,这可能会或可能会这不是一个问题。
答案 1 :(得分:1)
错误表示您尝试将列表用作哈希键。你能把它转换成元组吗?