目標は感情分類です。手順は、3 つの xlsx ファイルを開いて読み取り、gensim.doc2vec メソッドで処理し、SGDClassificator で分類することです。このコードを doc2vec で繰り返してみてください。パイソン 2.7
with open('C:/doc2v/trainpos.xlsx','r') as infile:
pos_reviews = infile.readlines()
with open('C:/doc2v/trainneg.xlsx','r') as infile:
neg_reviews = infile.readlines()
with open('C:/doc2v/unsup.xlsx','r') as infile:
unsup_reviews = infile.readlines()
しかし、結果のリストは期待されているものではないことが判明しました。
print 'length of pos_reviews is %s' % len(pos_reviews)
>>> length of pos_reviews is 1
ファイルには、対応する 18、1221、および 2203 の raw が含まれています。リストには同じ数の要素があると思いました。
次のステップは、すべての文を連結することです。
y = np.concatenate((np.ones(len(pos_reviews)), np.zeros(len(neg_reviews))))
x_train, x_test, y_train, y_test = train_test_split(np.concatenate((pos_reviews, neg_reviews)), y, test_size=0.2)
これは、x-train、x-test が本来あるべき文のリストである状況につながります。
y_train = [0.]
y_test = [1.]
この分割の後、すべての文にラベルが付けられます。
def labelizeReviews(reviews, label_type):
labelized = []
for i,v in enumerate(reviews):
label = '%s_%s'%(label_type,i)
labelized.append(LabeledSentence(v, [label]))
return labelized
x_train = labelizeReviews(x_train, 'TRAIN')
x_test = labelizeReviews(x_test, 'TEST')
unsup_reviews = labelizeReviews(unsup_reviews, 'UNSUP')
numpy documentationに書かれているように、配列は同じサイズでなければなりません。しかし、より大きなファイルを 18 行に減らしても、何も変わりません。フォーラムで検索したところ、同様のエラーはありません。何がうまくいかなかったのか、それを修正する方法は頭を悩ませています。手伝ってくれてありがとう!