ここでは、以下の3つの文書の類似度を判定します。
文書1:1次元配列とは、共通の名前を使用してアクセスすることが可能な、同じ型を持つ一連の変数のことです。
文書2:配列を使用すると、インデックスの異なる、同じ名前の変数にアクセスすることが可能となります。
文書3:1次元配列に対して多次元配列というものが存在し、配列の配列として実装されています。
手順1
形態素解析し、有効な形態素として動詞・名詞を抽出します。判りやすいように、その文書における出現回数(=tf)も併記します。
文書1の有効な形態素とその出現回数 |
文書2の有効な形態素とその出現回数 |
文書3の有効な形態素とその出現回数 |
単語 |
名詞or動詞 |
出現回数(tf) |
1 |
名詞 |
1 |
次元 |
名詞 |
1 |
配列 |
名詞 |
1 |
共通 |
名詞 |
1 |
使用 |
名詞 |
1 |
する |
動詞 |
2 |
アクセス |
名詞 |
1 |
こと |
名詞 |
2 |
可能 |
名詞 |
1 |
型 |
名詞 |
1 |
持つ |
動詞 |
1 |
一連 |
名詞 |
1 |
変数 |
名詞 |
1 |
|
単語 |
名詞or動詞 |
出現回数(tf) |
配列 |
名詞 |
1 |
使用 |
名詞 |
1 |
する |
動詞 |
2 |
インデックス |
名詞 |
1 |
異なる |
動詞 |
1 |
名前 |
名詞 |
1 |
変数 |
名詞 |
1 |
アクセス |
名詞 |
1 |
こと |
名詞 |
1 |
可能 |
名詞 |
1 |
なる |
動詞 |
1 |
|
単語 |
名詞or動詞 |
出現回数(tf) |
1 |
名詞 |
1 |
次元 |
名詞 |
2 |
配列 |
名詞 |
4 |
他 |
名詞 |
1 |
もの |
名詞 |
1 |
存在 |
名詞 |
1 |
する |
動詞 |
2 |
実装 |
名詞 |
1 |
れる |
動詞 |
1 |
いる |
動詞 |
1 |
|
|
手順2
3つの文書における有効な形態素に番号を割り当てて、それぞれに対してidfを求めます。
番号 |
単語 |
出現する文書の数 |
idf |
1 |
1 |
2 |
0.4055 |
2 |
次元 |
2 |
0.4055 |
3 |
配列 |
3 |
0 |
4 |
共通 |
1 |
1.0986 |
5 |
使用 |
2 |
0.4055 |
6 |
する |
3 |
0 |
7 |
アクセス |
2 |
0.4055 |
8 |
こと |
2 |
0.4055 |
|
番号 |
単語 |
出現する文書の数 |
idf |
9 |
可能 |
2 |
0.4055 |
10 |
型 |
1 |
1.0986 |
11 |
持つ |
1 |
1.0986 |
12 |
一連 |
1 |
1.0986 |
13 |
変数 |
2 |
0.4055 |
14 |
インデックス |
1 |
1.0986 |
15 |
異なる |
1 |
1.0986 |
16 |
名前 |
1 |
1.0986 |
|
番号 |
単語 |
出現する文書の数 |
idf |
17 |
なる |
1 |
1.0986 |
18 |
他 |
1 |
1.0986 |
19 |
もの |
1 |
1.0986 |
20 |
存在 |
1 |
1.0986 |
21 |
実装 |
1 |
1.0986 |
22 |
れる |
1 |
1.0986 |
23 |
いる |
1 |
1.0986 |
|
|
手順3
手順1と2で作成した表のtfとidfを用いて文書ベクトルを作成します。
この例では全体で23の有効な形態素があるので、文書ベクトルは23次元となります。そして{「1」のtf・idf, ... ,「いる」のtf・idf}のように、手順2の表で付けた番号の順にtfとidfの積をベクトルの成分として割り当てていきます。その結果、3つの文書は以下のように表されます。
文書1 = {0.4055, 0.4055, 0, 1.0986, 0.4055, 0, 0.4055, 0.8110,
0.4055, 1.0986, 1.0986, 1.0986, 0.4055, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0}
文書2 = {0, 0, 0, 0, 0.4055, 0, 0.4055, 0.4055,
0.4055, 0, 0, 0, 0.4055, 1.0986, 1.0986, 1.0986,
1.0986, 0, 0, 0, 0, 0, 0}
文書3 = {0.4055, 0.8110, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 1.0986, 1.0986, 1.0986, 1.0986, 1.0986, 1.0986}
手順4
ベクトル同士のなす角の余弦値を求めて、その値を元に類似度を求めます。
まずは手順3で求めた文書ベクトル間のなす角の余弦を求めます。各ベクトル間のなす角の余弦は以下のような値になります。
文書1の文書ベクトルと文書2の文書ベクトルがなす角の余弦:0.1631
文書1の文書ベクトルと文書3の文書ベクトルがなす角の余弦:0.0683
文書2の文書ベクトルと文書3の文書ベクトルがなす角の余弦:0
求めた余弦値を逆関数にかけて2つのベクトルがなす角度を求め、角度を正規化により0〜1の類似度とすると
文書1と文書2の類似度:0.1042
文書1と文書3の類似度:0.0435
文書2と文書3の類似度:0
のように類似度が求められます。