0

Oracleでファジーな名前検索を行うにはどうすればよいでしょうか。

例えば:

私たちのデータシステムには、次のような優先郵送があります。

ニコラス・ジム・ローリー氏

しかし、Facebookやその他の検索フィールドでは、アルゴリズムに渡される名前は次のとおりです。

ニックジムローリー

このプロセスでは、すべての優先名に対して検索名を実行し、最も一致する文字を含む結果を返します。

[ニック]オラス・ジム・ラリー氏

[ニック]kジムローリー

検索した名前の17文字のうち16文字が優先名に表示され、ランク付けされた提案を返すことができました。

[追加するために編集]

最初の提案とOracleのテキストクエリオプションの読み取りの後、テーブルにインデックスを作成しました

create index ADD_EX_INDX3 on address_extract(pref_mail_name) 
  indextype is ctxsys.context 
  parameters ('DATASTORE CTXSYS.DEFAULT_DATASTORE');

そして今、首尾よく引退することができます

select score(1), ae.pref_mail_name
from address_extract ae
 where contains(pref_mail_name,'fuzzy(raleigh,,,weight)',1) > 0
order by score(1) desck

どちらが

100 Mr. Raleigh H. Jameson
100 Mr. Nicolas Jim Raleigh
100 Ms. Susanne M. Raleigh
66  Mrs. LaReign Smith
66  Ms. Rahil Smith
62  Mr. Smith  Ragalie

しかし、私はフルネームの検索に苦労しています。フルネームをどうやってやるの?

4

1 に答える 1

5

名寄せは難しい。Oracle のテキスト インデックス作成は、ファジー マッチングとステミングをサポートしていますが、これは手始めに、次の名前を考慮してください。

  • ニコラス・ローリー
  • ニコラス・ローリー
  • ニコ・ローリー
  • ニック・ローリー
  • ニッキー・ローリー
  • ニック・ローリー
  • ニコラウス・ローリー
  • ニコラ・ローリー
  • ニッキー・ローリー
  • ニコラ・ローリー
  • ニコライ・ローリー
  • ニコライ・ローリー

レーベンシュタイン距離であろうとダブルメタフォンであろうと、抽象化によってそれらを一致させようとすると、偽陽性と偽陰性が生成されます。これが抽象化の性質です。的を絞った正確な結果セットを取得する最善の方法は、シソーラスを使用することです (これも完璧ではありません)。残念ながら、名前の包括的なシソーラスを集めるのは大変な作業です。タスクの感覚をつかむには、NameX サイトの統計をチェックしてください。


更新: Oracle 11gR2 には、名前検索用に調整された Oracle Text の拡張機能が含まれています。これは非常にきちんとしていて、間違いなく最初に始める場所です。 詳細をご覧ください

于 2013-01-11T23:50:32.733 に答える