2017-03-28 8 views
0

私はgensimでword2vecを作りたい私は、語彙コーパスがユニコードでなければならないと聞きましたので、私はそれをユニコードに変換しました。Python Gensim word2vecボキャブラリーキー

# -*- encoding:utf-8 -*- 
# !/usr/bin/env python 
import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 
from gensim.models import Word2Vec 
import pprint 

with open('parsed_data.txt', 'r') as f: 
    corpus = map(unicode, f.read().split('\n')) 

model = Word2Vec(size=128, window=5, min_count=5, workers=4) 
model.build_vocab(corpus,keep_raw_vocab=False) 
model.train(corpus) 
model.save('w2v') 

pprint.pprint(model.most_similar(u'너')) 

上記は私のソースコードです。それはうまくいくようです。しかし、ボキャブラリーキーには問題があります。私はユニコードを使用する韓国語のword2vecを作りたいです。例えば、英語で謝罪を意味し、それはユニコードの言葉사과は、私がword2vecで사과を発見しようとすると、キーエラーが発生し\xC0AC\xACFC ...
代わりの\xc0ac\xacfc\xc0ac\xacfc店舗別途です。 理由と解決方法は何ですか?

答えて

2

Word2Vecには、ワードトークンに分割されたテキスト例が必要です。 Word2Vecに文字列を渡しているだけなので、それらを反復処理すると、単語として単一文字が表示されます。

韓国語は単語の区切りにスペースを使用しますか?そのような場合は、Word2Vecにテキストの例としてリストの単語を渡す前に、スペースでテキストを区切ります。

もしそうでなければ、文章をWord2Vecに渡す前に、いくつかの外部ワードトークナイザ(gensimの一部ではない)を使用する必要があります。

+0

Umm ...私は '[u '\ ud504 \ ub791 \ uc2a4'、u '\ uc758'、u '\ uc138 \ uacc4'、u '\ uc801'、u '\ uc774'、u u '\ uc7c \ uc7c \ uc7c8'、u '\ uc758 \ uc0c1'、u '\ uc758 \ uc0c1'、u '\ uc790 \ uc774 \ ub108'、u '\ uc5e0 \ ub9c8 \ ub204 \ uc5d8' u '\ uc9c1 \ ubb3c'、u '\ ub514 \ uc790 \ uc774 \ ub108'、u '\ ub85c'、およびu '\ uc7a5 \ uc2dd' 、u '\ uub5c8'、u '\ ub2e4'] 'とする。ユニコード文字列のリスト。それは有効ではありませんか? – Damotorie

+0

これは 'corpus'リストを作成するためのコードが示すものではありません。 (あなたの実際のコードは質問の内容と異なるのですか?)コーパス[0]とは何ですか?トークンのリストではなく文字列の場合、すべてのWord2Vecは個々の文字になります。 (最近のバージョンのgensimでは、ボキャブラリ全体が1文字のトークンであると思われる場合、警告が記録されます)。 – gojomo

関連する問題