0

目標は感情分類です。手順は、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 行に減らしても、何も変わりません。フォーラムで検索したところ、同様のエラーはありません。何がうまくいかなかったのか、それを修正する方法は頭を悩ませています。手伝ってくれてありがとう!

4

1 に答える 1

1

readlines通常、や などの方法を使用して、Microsoft Excel ファイルをテキスト ファイルとして読み取ることはできませんread。前にファイルを別の形式に変換するか ( csvモジュールで読み取ることができる .csv が適切な解決策です)、 pyexcelopenpyxlなどの特別な python モジュールを使用して.xlsx ファイルを直接読み取る必要があります。

于 2016-09-01T14:23:52.610 に答える