• 締切済み

言葉の類似性を求めるアルゴリズム

お世話になります。 C#にて、データベース(SQLite)を操作するプログラムを作っています。 データベースのテーブル上に、IDと名前の二つの要素があるとします。 データベースにInsertする際に、これから追加しようとする『名前』と、 データベースの既存のデータの『名前』を比較し、類似性のあるものを 教えてくれる仕組みを作りたいと思っています。 『データベース上に、【xxxx】という名前のレコードがありました。 もしかすると、今Insertしようとしているのは、このデータのことではないですか?』 …等の様なメッセージを表示させ、ユーザに催促させたいのですが、 このように『似通ったデータがある』といったデータを抽出させることは SQLなどでは可能でしょうか。もしくは、C#などのメソッドでできることでしょうか。 もしくは、それらしいものを自作しないとダメでしょうか。 かなり条件的には高めに見ており、『あいうえお かきくけこ さしすせそ 50kg』 といったデータが既にある場合、 『かきくけこ あいうえ さしすせそ 50K』でもヒット、 『あいくけこ 50 さしすせそかきうけこ』でもヒットといった感じです。 単純に、一文字ずつ比較してしまうといった流れになってしまいそうな気もしますが、 もっと効率の良い方法がありましたらお教えいただけないでしょうか。 よろしくお願いいたします。

みんなの回答

  • yamaj_biz
  • ベストアンサー率71% (10/14)
回答No.2

以前名寄せが必要な際に、以下のサイトを参考にさせていただきました。 秀逸です。 http://d.hatena.ne.jp/siokoshou/20080324

参考URL:
http://d.hatena.ne.jp/siokoshou/20070315
tatapatank
質問者

お礼

回答、ありがとうございます。 データベース単体でできればと思ってたのですが、 それは無理そうなので、参考のサイトを手掛かりに 作成してみたいと思います。 …ただ、その方法では、データベースから一度すべてのデータを 引っ張り出し、一つ一つ比較するしかなくなってしまうかと 思うのですが…、これは致し方ないことなのでしょうか…。 DB的には、相当な負担になってしまうような気も…。 ありがとうございました。

回答No.1

「名寄せ」でぐぐりましょう。いっぱい情報が出てきます。 すごく大雑把に言えば、データの特性ごとに不要文字を除いて比較したり、 切り分けたり、置き換えたり、並び替えたり、数えたり、多角的に比較して類似性を数値化して 一定のスコア以上であれば類似と判定するとか、そういった処理になります。 ご質問にあった文字列であれば ・スペースは無いものとして比較する ・数字のみの単語、数字+Kの単語、数字+KG単語は同一と見なす ・構成している文字の数(「あ」が1文字、「い」が1文字・・・)が同一であれば類似 とするとか。

tatapatank
質問者

お礼

回答、ありがとうございます。 参考にさせていただきましたが、SQL、つまり データベースの既存の機能ではできないみたいですね。 一発であいまい検索してくれるSQLがあればと思ったのですが…。 ありがとうございました。

関連するQ&A