2016-12-19 9 views
0

を持っていない私はgensimライブラリからDoc2Vecモデルを学んでいますし、次のようにそれを使用して:Gensim Doc2Vec例外はAttributeError:「str」はオブジェクトが属性の言葉 "

class MyTaggedDocument(object): 
    def __init__(self, dirname): 
     self.dirname = dirname 

    def __iter__(self): 
     for fname in os.listdir(self.dirname): 
      with open(os.path.join(self.dirname, fname),encoding='utf-8') as fin: 
       print(fname) 
       for item_no, sentence in enumerate(fin): 
        yield LabeledSentence([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no]) 
sentences = MyTaggedDocument(dirname) 
model = Doc2Vec(sentences,min_count=2, window=10, size=300, sample=1e-4, negative=5, workers=7) 

入力dirnameがために、持っているディレクトリのパスですシンプルさのために、各ファイルには100本以上のラインを含む2つのファイルしかありません。私はExceptionに続いています。

Output

また、print文で私は、反復子がディレクトリを6回にわたり反復することを見ることができました。なぜこれはそうですか?

何か助けていただければ幸いです。それは、(以前はLabeledSentence呼ばwordstags特性を有する)TaggedDocumentのような形をしなければならないテキストの例オブジェクトの1、のように見える

+0

ストップワードにwが含まれていないと、1つのことはしたくないですか?あなたの文章にはストップワードしか含まれていません。 – datawrestler

+0

これは間違いですが、私はそれを修正しましたが、同じ問題が残っています。 –

答えて

0

、何とか代わりにプレーンな文字列です。スクリーンショットのエラーが、あなたが含まれている繰り返し可能なコードによって生成されたことを100%確信していますか?

あなたの提供されたコーパスIterableは、すべての単語/タグを発見した最初のスキャンを行うために1回読み込まれ、次にトレーニングのために再度複数回読み込まれます。 iterパラメータで制御される回数は、デフォルト値(gensimの最近のバージョンでは5)で5回です。したがって、初期スキャン+ 5回のトレーニング・パスは合計6回の繰り返しになります。 (10回以上の反復はDoc2Vecでよく見られます)

関連する問題