我正在尝试使用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())
任何帮助都将非常感激,如果任何人可以合作,哪个更好,就像每个作者的文件夹中的文件或每个作者的一个大文本文件
由于