最近それを利用して文章群と文章群の中から似た文章を選び出すという作業を行いました。
このときネットからプログラムを取り寄せたのですがどういうわけかみな違う値を出します。
いずれも問題があることがわかったので、高速化も兼ねて作ってしまいました。
githubに置いてあります
文章群と文章群の文章ごとの比較を行うときのためのちょっと手抜き高速化も仕込んであります。
プログラムの中を調べてみますと少しずつ違いがあります。(結果が違うんだから当然か)
原理を求めてさまよってわかったのは、(文章の)tri-gram の定義は明確なのですが、それを利用して
類似をを求める部分の説明・定義・原理について記述してあるものに行き当たりませんでした。
プログラムを眺めるといくつか懸念点がでてきます。
基本は 類似度 = 同じtrigramの数 / trigramの総数 なのですが
TriGram | AとB | とBを | Bを比 | を比べ | 比べて | べても | ても、 | も、B | 、Bと | BとA | とAを | Aを比 | も、A | 、Aと | Bを較 | を較べ | 較べて | |
回数 | A | 1 | 1 | 1 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | |||||
B | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
複数回出てくるtrigramがあることを考慮すると
TriGram | AとB | とBを | Bを比 | を比べ | 比べて | べても | ても、 | も、B | 、Bと | BとA | とAを | Aを比 | も、A | 、Aと | Bを較 | を較べ | 較べて | 合計 | |
回数 | 分子 | 1 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 | 10 | ||||||||
分母 | 1 | 1 | 1 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 20 |
その考え方で作られていると思われるものは本methodの他に(2)(4)(6)が有りましたが、
各々少しずつ問題がありました。
本方法 | (1) | (2) | (3) | (4) | (5) | (6) | ||||||||||
回数 | 子 | 母 | 子 | 母 | 子 | 母 | 子 | 母 | 子 | 母 | 子 | 母 | 子 | 母 | ||
AとB | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||
とBを | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||
Bを比 | 1 | 1 | 1 | 1 | 1 | |||||||||||
を比べ | 2 | 1 | 1 | 2 | 2 | 4 | 1 | 1 | 2 | 1 | 1 | 1 | ||||
比べて | 2 | 1 | 1 | 2 | 2 | 4 | 1 | 1 | 2 | 1 | 1 | 1 | ||||
べても | 2 | 2 | 2 | 2 | 4 | 4 | 1 | 1 | 2 | 2 | 1 | 1 | ||||
ても、 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||
も、B | 1 | 1 | 1 | 1 | 1 | |||||||||||
、Bと | 1 | 1 | 1 | 1 | 1 | |||||||||||
BとA | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||
とAを | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||
Aを比 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ||||
も、A | 1 | 1 | 1 | 1 | 1 | |||||||||||
、Aと | 1 | 1 | 1 | 1 | 1 | |||||||||||
Bを較 | 1 | 1 | 1 | 1 | 1 | |||||||||||
を較べ | 1 | 1 | 1 | 1 | 1 | |||||||||||
較べて | 1 | 1 | 1 | 1 | 1 | |||||||||||
べて | 1 | 1 | 1 | 1 | ||||||||||||
て | 1 | 1 | 1 | 1 | ||||||||||||
合計 | 10 | 20 | 14 | 21 | 9 | 17 | 14 | 17 | 9 | 17 | ||||||
0.50 | 0.67 | 0.53 | 0.46 | 0.82 | 0.46 | 0.53 |