在我自己的语料库上使用Python的NLTK作者

时间:2012-11-24 16:08:23

标签: nltk

我正在尝试使用NLTK实现作者身份识别,到目前为止,我无法弄清楚我应该如何安排语料库,并假设使用BOW作为功能的最简单方案,我不知道如何存储此功能,如list,set,FreqDist或Dic?我想要做的是将文档放在文件夹中,每个文件夹都是类标签,例如author1作为文件夹,所有他的培训文档都在该文件夹中,其他作者也是如此。到目前为止,我玩过的所有文件都是一个作为一个大文本文件的文件保存在gutenberg语料库中并移动原始gutenberg文件并使用:

来自nltk.corpus import gutenberg

通过这个我可以访问我的文件并可以执行BOW但不知道如何存储它们以发送到分类。 我试图修改下面的示例中的movie_reviews以适应我的语料库但失败了:

import numpy as np
import nltk
from nltk.probability import FreqDist
from nltk.classify import SklearnClassifier
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline

pipeline = Pipeline([('tfidf', TfidfTransformer()),
                     ('chi2', SelectKBest(chi2, k=200)),
                     ('nb', MultinomialNB())])
classif = SklearnClassifier(pipeline)

from nltk.corpus import movie_reviews
pos = [FreqDist(movie_reviews.words(i)) for i in movie_reviews.fileids('pos')]
neg = [FreqDist(movie_reviews.words(i)) for i in movie_reviews.fileids('neg')]
add_label = lambda lst, lab: [(x, lab) for x in lst]
classif.train(add_label(pos[:100], 'pos') + add_label(neg[:100], 'neg'))

l_pos = np.array(classif.batch_classify(pos[100:]))
l_neg = np.array(classif.batch_classify(neg[100:]))
print "Confusion matrix:\n%d\t%d\n%d\t%d" % (
          (l_pos == 'pos').sum(), (l_pos == 'neg').sum(),
          (l_neg == 'pos').sum(), (l_neg == 'neg').sum())

任何帮助都将非常感激,如果任何人可以合作,哪个更好,就像每个作者的文件夹中的文件或每个作者的一个大文本文件

由于

0 个答案:

没有答案