使用NLTK for Python对tweet语料库进行情感分析培训

使用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

我正在尝试使用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 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也可能规范化某个地方的路径,并使差异变得毫无意义,但希望这就是问题所在。