文字列の類似度 - Levenshtein距離
文字列の類似度を示す指標として、Levenshtein Distance (別名 Edit Distance。以下LDと略す)という考え方が使われている。ソースとなる文字列(s)とターゲット(t)があるとして、LDは、sをtに変換する過程で必要な文字の削除、挿入、置換の総和である。
sとtのLDをLD(s,t)と書くとして、たとえば、 LD(”test”, “tent”) = 1 LD(”test”, “past”) = 2
上記のページには、各種プログラミング言語でのLDの実装の例が紹介されている。その中には Objective-C、SQLなどもみられる。このうち、Objective-Cでの実装は、NSStringのカテゴリーとして、LDを計算する関数を実装しているので、非常に簡単に使える。
NSString *s, *t,
[s comareWithString: t];
実際にこの関数をテスト用のDBシステムに実装してみた。検索ワードが入力されるたびに、検索語とのLDが計算され、transient attributeとして保持される仕組みを作った。ユーザが指定した閾値以下のLDを持つ単語がテーブル上に表示される。
英仏、仏英、独英辞書がインポートされたテスト用のDBで試してみたところ、例えば、英語の”current” に似た言葉として、フランス語の quarante (40) crainte (恐れ)などが、また “announce”には anana (パイナップル)と面白い例がいくつかみられた。
まだ単純にLDを計算しているだけなので、すべての発音記号の違いを等価に扱っている。発音記号”列”の違いとしては小さいものの、実際の発音は大きく異なるという場合が頻繁にみられた。前回の記事にも書いたように、発音記号を似通った音のカテゴリーに分けてLDを計算する際に考慮に入れる等のアルゴリズムの実装が今後の課題になる。
(徳井)
Project Phonethica
Combining scientific technology and art, Phonethica is an interdisciplinary project which explores the diversity of the world, through the phonetics of its 6,000 languages.
Search
Archives
- November 2007
- September 2007
- August 2007
- April 2007
- March 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- July 2006
- June 2006
- May 2006
- April 2006
- March 2006
- February 2006
- January 2006
- December 2005
- November 2005
- October 2005
- September 2005
- August 2005
- July 2005
- June 2005
- May 2005

No Responses to “文字列の類似度 - Levenshtein距離”
Please Wait
Leave a Reply