1

お願いします、私は人物リアルタイム識別の PoC に取り組んでいます。その重要な側面の 1 つは、名、ミドルネーム、および姓の軽微なスペルミスと音声上のバリエーションの両方をサポートすることです。HarinGton == HarrinBton または RaphEAl == RafaEl のように。より長い名前には機能しますが、Lee や John のような名前にはもう少し不正確です。

PostgreSQL 13.3 (Supabase.io) で dmetaphone() および dmetaphone_alt() を介して Double Metaphone を使用しています。そして、Double Metaphone には感謝していますが、結果として (あまりにも?) 短い文字列が含まれています。metaphone() には、結果の音声表現を長くするためのパラメーターがあります。dmetaphone() を調べたところ、デフォルトの関数以外は見つかりませんでした。

dmetaphone() と dmetaphone_alt() が、metaphone() のものと同様の長い音声表現を返すようにする方法はありますか?ただし、ALT のバリエーションがありますか?

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

1

これらの機能のpostgres ドキュメントを見ると、Double Metaphone のエンコードされた文字列の長さをパラメトリックに制御することはできません。単一の Metaphone の場合、出力文字列のみを切り詰めることができます。

max_output_length出力 metaphone コードの最大長を設定します。それより長い場合、出力はこの長さに切り捨てられます。

ただし、me​​taphone メソッドのいずれかからエンコードされた出力を使用するTrigram Similarityか、エンコードされた出力を使用することで、より良い結果が得られる場合があります。これは、Metaphones を使用して音声順列を処理するためのより強力な方法です。Levenshtein Distance

アーティスト に可能なすべてのスペルの順列を考慮してください。Cyndi Lauperトリグラムの類似性を持つダブル メタフォンを使用すると、間違った文字列cindy lorperと正しいスペルの間で 100% の類似性を達成できます。

SELECT similarity(dmetaphone('cindy lorper'), dmetaphone('cyndi lauper'));

利回り: similarity real: 1(つまり: 100% の類似性)

これは、Double Metaphone を使用した両方の入力文字列のエンコーディングが同一であることを意味します。Metaphone を使用する場合は、少し異なります。以下のすべての収量SNTLRPR

SELECT metaphone('cyndy lorper',10);
SELECT metaphone('sinday lorper', 10);
SELECT metaphone('cinday laurper', 10);
SELECT metaphone('cyndi lauper',10);

yields:SNTLPRとは 1 文字だけ異なりますSNTLRPR

レーベンシュタイン距離を使用して計算することもできます。これにより、操作するフィルター可能なパラメーターが得られます。

SELECT levenshtein(metaphone('sinday lorper', 10), metaphone('cyndi lauper', 10));

収量:levenshtein integer: 1


より長い名前には機能しますが、Lee や John のような名前にはもう少し不正確です。

より完全なreprexがなければ、問題を正確に把握するのは少し困難です。

SELECT similarity(dmetaphone('lee'), dmetaphone('leigh'));
SELECT similarity(dmetaphone('jon'), dmetaphone('john'));

両方の結果: similarity real: 1(つまり: 100% の類似性)

編集: postgres とのあいまい一致のわかりやすいガイドを次に示します。

于 2021-12-18T09:06:54.417 に答える