使用NLTK for Python对tweet语料库进行情感分析培训
我正在尝试使用NLTK for python来训练自己的情感分析语料库。我有两个文本文件:一个是25K条正面推文,每行分开,另一个是25K条负面推文 当我运行此代码创建语料库时:使用NLTK for Python对tweet语料库进行情感分析培训,python,twitter,nlp,nltk,sentiment-analysis,Python,Twitter,Nlp,Nltk,Sentiment Analysis,我正在尝试使用NLTK for python来训练自己的情感分析语料库。我有两个文本文件:一个是25K条正面推文,每行分开,另一个是25K条负面推文 当我运行此代码创建语料库时: import string from itertools import chain from nltk.corpus import stopwords from nltk.probability import FreqDist from nltk.classify import NaiveBayesClassifi
import string
from itertools import chain
from nltk.corpus import stopwords
from nltk.probability import FreqDist
from nltk.classify import NaiveBayesClassifier as nbc
from nltk.corpus import CategorizedPlaintextCorpusReader
import nltk
mydir = 'C:\Users\gerbuiker\Desktop\Sentiment Analyse\my_movie_reviews'
mr = CategorizedPlaintextCorpusReader(mydir, r'(?!\.).*\.txt', cat_pattern=r'(neg|pos)/.*', encoding='ascii')
stop = stopwords.words('english')
documents = [([w for w in mr.words(i) if w.lower() not in stop and w.lower() not in string.punctuation], i.split('/')[0]) for i in mr.fileids()]
word_features = FreqDist(chain(*[i for i,j in documents]))
word_features = word_features.keys()[:100]
numtrain = int(len(documents) * 90 / 100)
train_set = [({i:(i in tokens) for i in word_features}, tag) for tokens,tag in documents[:numtrain]]
test_set = [({i:(i in tokens) for i in word_features}, tag) for tokens,tag in documents[numtrain:]]
classifier = nbc.train(train_set)
print nltk.classify.accuracy(classifier, test_set)
classifier.show_most_informative_features(5)
我收到错误消息:
C:\Users\gerbuiker\Anaconda\python.exe "C:/Users/gerbuiker/Desktop/Sentiment Analyse/CORPUS_POS_NEG/CreateCorpus.py"
Traceback (most recent call last):
File "C:/Users/gerbuiker/Desktop/Sentiment Analyse/CORPUS_POS_NEG/CreateCorpus.py", line 23, in <module>
documents = [([w for w in mr.words(i) if w.lower() not in stop and w.lower() not in string.punctuation], i.split('/')[0]) for i in mr.fileids()]
File "C:\Users\gerbuiker\AppData\Roaming\Python\Python27\site-packages\nltk\corpus\reader\util.py", line 336, in iterate_from
assert self._len is not None
AssertionError
Process finished with exit code 1
C:\Users\gerbuiker\Anaconda\python.exe“C:/Users/gerbuiker/Desktop/touction analysis/CORPUS\u POS\u NEG/CreateCorpus.py”
回溯(最近一次呼叫最后一次):
文件“C:/Users/gerbuiker/Desktop/touction analysis/CORPUS_POS_NEG/CreateCorpus.py”,第23行,在
documents=[([w代表mr.words中的w(i)如果w.lower()不在stop中,w.lower()不在string.标点符号中),i.split('/')[0])代表mr.fileids()中的i]
文件“C:\Users\gerbuiker\AppData\Roaming\Python27\site packages\nltk\corpus\reader\util.py”,第336行,位于
断言自我。len不是None
断言错误
进程已完成,退出代码为1
有人知道如何解决这个问题吗?我不是100%肯定的,因为我现在没有在Windows机器上测试这个问题,但我想可能会让你注意到的是@alvas原始示例中的路径斜线方向和你对Windows的适应之间的差异
具体来说,您可以使用:
'C:\Users\gerbuiker\Desktop\touction analysis\my\u movie\u reviews'
,而他的示例使用'/home/alvas/my\u movie\u reviews'
。在大多数情况下,这很好,但您尝试重新使用他的cat_模式
regex:r'(neg | pos)/.*
,它将匹配其路径中的斜杠,但拒绝您路径中的斜杠。目录/文件夹的结构是什么。可以做一个dirc:/Users/gerbuiker/Desktop/toucture分析?dir命令的输出是什么?C:\Users\gerbuiker\Desktop\touction analysis\my_movie_reviews此文件夹包含一个文件'README.txt'+两个子文件夹->1'pos',其中包含pos.txt,包含25K行带有正推文的tweets 1'neg',其中包含neg.txt,包含25K行负面推文,因此设置与原始movie_review文件夹相同,只是我的两个子文件夹各包含一个大文本文件,而原始movie_review包含大量带有Reviews的小文本文件,因为我目前无法测试它,NLTK也可能规范化某个地方的路径,并使差异变得毫无意义,但希望这就是问题所在。