0

Pythonマッパーリデューサー機能を使用してトークナイザーを適用しようとしています。次のコードがありますが、エラーが発生し続けます。レデューサーはリストに値を出力し、値をベクトライザーに渡しています。

from mrjob.job import MRJob
from sklearn.cross_validation import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer

class bagOfWords(MRJob):

def mapper(self, _, line):
    cat, phrase, phraseid, sentiment = line.split(',')
    yield (cat, phraseid, sentiment), phrase

def reducer(self, keys, values):

    yield keys, list(values)

#Output: ["Train", "--", "2"] ["A series of escapades demonstrating the adage that    what is good for the goose", "A series", "A", "series"]

def mapper(self, keys, values):
    vectorizer = CountVectorizer(min_df=0)
    vectorizer.fit(values)
    x = vectorizer.transform(values)
    x=x.toarray()       
    yield keys, (x)


if __name__ == '__main__':
    bagOfWords.run()

ValueError: 語彙が空です。おそらくドキュメントにはストップワードしか含まれていません

皆さんが提供できる助けをありがとう。

4

1 に答える 1

0

はステートフルです。CountVectorizer語彙を構築するには、同じ 1 つのインスタンスを完全なデータセットに適合させる必要があるため、これは並列処理に適していません。

代わりに、HashingVectorizerステートレスな を使用できます (適合する必要はありませんtransform。直接呼び出すことができます)。

于 2014-09-24T09:01:05.843 に答える