2

NLTKを使って著者識別を実装しようとしていますが、これまでコーパスをどのように配置すればよいかわかりませんでした.BOWを機能として使用する最も簡単なシナリオを想定すると、この機能を保存する方法がわかりません. 、リスト、セット、FreqDist、Dic など? 私がやりたいのは、自分のドキュメントをフォルダーに入れることです。各フォルダーはクラス ラベルであり、フォルダーとしての author1 とそのフォルダー内のすべてのトレーニング ドキュメントのように、他の作成者も同様です。グーテンベルクコーパスに保存され、元のグーテンベルクファイルを移動し、以下を使用して1つの大きなテキストファイルとして1人の著者のドキュメント:

nltk.corpus からグーテンベルクをインポート

これにより、ファイルにアクセスして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())

作成者ごとにファイルをフォルダに保存するか、作成者ごとに 1 つの大きなテキスト ファイルを作成する方がよいかについて協力できる場合は、どんな助けも大歓迎です。

ありがとう

4

0 に答える 0