2

データベースにジャロウィンクラーアルゴリズムの実装があります。私はこの関数を書きませんでした。この関数は2つの値を比較し、一致する確率を示します。

したがって、jaro(string1、string2、matchnoofchars)は結果を返します。

2つの文字列を比較する代わりに、matchnoofcharsを使用して1つの文字列を送信し、95%より高い確率で結果セットを取得したいと思います。

たとえば、現在の関数はjaro( "Philadelphia"、 "Philadelphlaa"、9)に対して97.62%を返すことができます。

この関数を微調整して、「フィラデルフィア」の入力に対して「フィラデルフィア」を見つけられるようにしたいと思います。これを実現するには、どのような変更を加える必要がありますか?

Oracle9iを使用しています。

4

3 に答える 3

3

「フィラデルフィア」のような単語を含む単語のリストはありますか?

そして、誰がその関数を書きましたか?

Oracle には、ファジー テキスト比較用のパッケージ utl_match があります

できませんか

jaro(w1.word,'Philadelphlaa', 9) >= 0.95 の単語 w1 から w1.word を選択します

?

'Philadelphia' という単語が表の単語に含まれている場合は、その単語が選択されます。

于 2010-08-28T16:00:58.380 に答える
1

少し汚れていますが、高速です (テストされていません!)。

最初の 3 文字が同じで、長さもほぼ同じであるとします。

DECLARE
  CURSOR citynames(cp_start in varchar2, cp_length in number) IS
    SELECT city FROM table_loc_master where statecode = 'PQ'
    and   city like cp_start||'%'
    and   length(city) between cp_length -2 and cp_length +2;
  CURSOR leasecity IS
    SELECT city FROM table_loc where State = 'PQ'
    MINUS
    SELECT to_char(city) city FROM table_loc_master where statecode = 'PQ';
  xProb NUMBER(10,8);
BEGIN
  FOR x_rec IN leasecity
  LOOP
      FOR y_rec IN citynames(substr(x_rec.city,1,3), length(x_rec.city))
      LOOP
            xProb := jwrun(x_rec.city,y_rec.city,length(y_rec.city));
            If xProb > 0.97 Then
               DBMS_OUTPUT.PUT_LINE('Source : ' || x_rec.city || ' Target: ' || y_rec.city );
            End if;
      END LOOP;
  END LOOP;
END;
于 2010-08-30T19:38:32.853 に答える
0
DECLARE
  CURSOR citynames IS
    SELECT city FROM table_loc_master where statecode = 'PQ';
  CURSOR leasecity IS
    SELECT city FROM table_loc where State = 'PQ'
    MINUS
    SELECT to_char(city) city FROM table_loc_master where statecode = 'PQ';
  xProb NUMBER(10,8);
BEGIN
  FOR x_rec IN leasecity
  LOOP
      FOR y_rec IN citynames
      LOOP
            xProb := jwrun(x_rec.city,y_rec.city,length(y_rec.city));
            If xProb > 0.97 Then
               DBMS_OUTPUT.PUT_LINE('Source : ' || x_rec.city || ' Target: ' || y_rec.city );
            End if;
      END LOOP;
  END LOOP;
END;
于 2010-08-30T18:57:58.957 に答える