0

SOUNDEXがNUMBERSを文字列として使用しない理由を知っていますか?

これらのクエリは正常に機能します。

select 1 from dual
where soundex('for you') = soundex('for u')
;

select 1 from dual
where soundex('for you') = soundex('for you')
;

しかし、これはそうではありません:

select 1 from dual
where soundex('6000') = soundex('6000')
;
select 1 from dual
where soundex('5') = soundex('5')
;

ドキュメントhttp://docs.oracle.com/cd/E11882_01/server.112/e26088/functions167.htm#SQLRF06109を読んでいましたが、それについて役立つ情報については触れていません。

4

3 に答える 3

3

soundexアルゴリズムは、使用されている正確なスペルではなく、音の響きに基づいて名前を照合するために特別に開発されました。これは基本的に、文字列を主に子音を含む短い文字列にマッピングすることによって機能します。数字は、soundexアルゴリズムによって完全に無視されます(たとえば、文字列から削除されます)。

数字の文字列で近似マッチングを行うには、別の戦略が必要になります。

于 2012-09-20T19:39:00.460 に答える
1

応答に加えて、それは文字を取り、それらがどのように聞こえるかに従って値を割り当てます。それは数字を取りません、それらはプロセスで考慮されません、それがそれが機能しない理由です。

レーベンシュタイン距離などの他のアルゴリズムを使用して、文字列として扱われる数値を比較し、良好な結果を得ることができます。

https://en.wikipedia.org/wiki/Levenshtein_distance

Oracle SQLでは、「utl_match」を使用できます。

于 2015-10-22T14:13:45.150 に答える
-1

Soundex関数は、英語で同じように聞こえ、音声的に互いに類似している文字列を返します

たとえば、「peek」と「pick」は音声的に類似した単語であるため、2つのいずれかをクエリすると、soundexは両方の結果をもたらします。

soundexのアルゴリズムは、最初のステップで単語から母音を削除します。これは、数字の場合は何もありません。ただし、この手順は省略できます。

次に、2番目のステップでは、次の方法で文字に数字を割り当てます。

v = 1 | c、g、j、k、q、s、x、z = 2 | d、t = 3 | l = 4 | m、n = 5 | r = 6 |

アルゴリズムによると、soundex関数で文字列として渡される数値に数値を割り当てることはできません。

したがって、soundexは文字列としての数値に対しては失敗しますが、渡された文字値に対しては機能します。

コートシー:Oraclemine.com

http://oraclemine.com/soundex-function-oracle/

于 2016-03-28T19:56:25.597 に答える