2016-05-13 5 views
1

私は、類似度を使って2つのテキストを単語の頻度と比較しようとしています。ベクトルを0で塗りつぶす

は、次の2つの文を想像:

テキスト1 =「ウィキペディアをインターネット百科事典は、サポートされている非営利のウィキメディア財団が主催している」.split()

テキスト2 =「ウィキペディアは無料です

:その後、私はベクトルとして任期の周波数を使用するのwikiソフトウェア」.split()

を使用して共同で構築された百科事典

ここでは、vec_xの "by"のカウントがvec_yの "by"のカウントと同じ位置で一致し、そのワードがいずれのフィールドにも表示されない場合ベクトルに0を加えると、同じ長さになります。したがって、たとえば:

#vectors obtained 
#vec_x = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
#vec_y = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 

#Output expected 
#vec_x = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1] 
#vec_y = [1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1] 

ありがとうございます。どんな助けもありがとうございます。

編集:タイプミス

+0

@Keozonは最後に 'split()'を見逃しました。 –

答えて

4

文章の任意の数を処理するために少しを一般化のため申し訳ありませんが、我々はすべての単語のリストを作成し、そのためにカウントを反復して、ベクトルを合わせることができます。

>>> texts = [text1, text2] 
>>> counts = [Counter(text) for text in texts] 
>>> all_words = sorted(set().union(*counts)) 
>>> vecs = [[count.get(word, 0) for word in all_words] for count in counts] 
>>> vecs[0] 
[0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1] 
>>> vecs[1] 
[1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1] 
+0

答えをありがとう:)まさに私が探していたもの。 – Wunter

関連する問題