サウンデックス

Soundex は、英語で発音される音によって名前のインデックスを作成する音声アルゴリズムです。目標は、同音異義語を同じ表現にエンコードして、スペルの多少の違いがあっても一致できるようにすることです[1]このアルゴリズムは主に子音をエンコードします。母音は最初の文字でない限りエンコードされません。Soundex は、すべての音声アルゴリズムの中で最も広く知られています( IBM Db2PostgreSQL[2] MySQL[3] SQLiteなどの人気のあるデータベース ソフトウェアの標準機能であることも理由の 1 つです) [4] IngresMS SQL Server[5] Oracle[6] ClickHouse[7] Snowflake [8]、およびSAP ASE[9] ) Soundex の改善は、多くの最新の音声アルゴリズムの基礎となっています。[10]

歴史

Soundex は Robert C. Russell と Margaret King Odell [11]によって開発され1918 年[12]と 1922 年に特許を取得しました。 [13]バリエーションである American Soundex は、 1890 年から 1890 年までの米国国勢調査の遡及分析のために 1930 年代に使用されました。 Soundex コードは、 Communications and Journal of the Association for Computing Machineryのいくつかの記事の主題となった 1960 年代に、特にDonald Knuth のThe Art of Computer Programmingで説明されたときに有名になりました。[14]

国立公文書記録管理局(NARA) は、米国政府が使用する Soundex の公式実装のために設定された現在のルールを維持しています。[1]これらのエンコード規則は、要求に応じて、NARA から一般情報リーフレット 55「国勢調査 Soundex の使用」の形式で入手できます。

アメリカンサウンデックス

名前の Soundex コードは、文字とそれに続く 3桁の数字で構成されます。文字は名前の最初の文字で、数字は残りの子音をエンコードします。調音の同様の場所にある子音は同じ桁を共有するため、たとえば、唇音子音B、F、P、V はそれぞれ数字 1 としてエンコードされます。

正しい値は次のようにして確認できます。

  1. 名前の最初の文字を保持し、その他の a、e、i、o、u、y、h、w をすべて削除します。
  2. 次のように子音を数字に置き換えます (最初の文字の後)。
    • b、f、p、v → 1
    • c、g、j、k、q、s、x、z → 2
    • d、t→3
    • l→4
    • m、n → 5
    • r→6
  3. 元の名前に同じ番号を持つ 2 つ以上の文字が隣接している場合 (ステップ 1 の前)、最初の文字のみが保持されます。また、「h」、「w」、または「y」で区切られた同じ番号を持つ 2 つの文字は 1 つの数字としてコード化されますが、母音で区切られたそのような文字は 2 回コード化されます。この規則は最初の文字にも適用されます。
  4. 単語内の文字数が少なすぎて 3 つの数字を割り当てることができない場合は、数字が 3 つになるまでゼロを追加します。数字が 4 つ以上ある場合は、最初の 3 つだけを保持します。

このアルゴリズムを使用すると、「Robert」と「Rupert」は両方とも同じ文字列「R163」を返しますが、「Rubin」は「R150」を返します。「Ashcraft」と「Ashcroft」は両方とも「A261」を生成します。「Tymczak」では、「T520」ではなく「T522」が生成されます (名前の文字「z」と「k」は、間に母音が含まれるため、2 として 2 回コード化されます)。「Pfister」は「P123」ではなく「P236」を生成し (最初の 2 文字は同じ番号を持ち、一度「P」としてコード化されます)、「Honeyman」は「H555」を生成します。

次のアルゴリズムは、ほとんどの SQL 言語 (PostgreSQL [例が必要]を除く) で採用されています。

  1. 最初の文字を保存します。a、e、i、o、u、y、h、w のすべての出現をマップします。ゼロ(0)へ
  2. 上記の [2.] のように、すべての子音 (最初の文字を含む) を数字に置き換えます。
  3. 隣接するすべての同じ数字を 1 つの数字に置き換えてから、すべてのゼロ (0) の数字を削除します。
  4. 保存された文字の数字が結果の最初の数字と同じである場合は、その数字を削除します (文字は保持します)。
  5. 結果に含まれる数字が 3 桁未満の場合は、ゼロを 3 つ追加します。最初の文字とその後の 3 桁を除くすべてを削除します (この手順は上記説明の [4.] と同じです)。

上記の 2 つのアルゴリズムは、主に母音が削除されるタイミングの違いにより、すべてのケースで同じ結果を返すわけではありません。最初のアルゴリズムはほとんどのプログラミング言語で使用され、2 番目のアルゴリズムは SQL で使用されます。例として、「Robert」と「Rupert」は両方とも「R163」を生成しますが、「Tymczak」は「T520」を生成し、「Honeyman」は「H555」を生成します。SQL とプログラミング言語を組み合わせたアプリケーションを設計する場合、アーキテクトは、Soundex エンコーディングのすべてを SQL サーバーで実行するか、すべてをプログラミング言語で実行するかを決定する必要があります。MySQL 実装は 4 文字を超える文字を返すことができます。[15] [16]

バリエーション

「Reverse Soundex」と呼ばれる同様のアルゴリズムでは、名前の最初の文字ではなく最後の文字が接頭辞として付けられます。

New York State Identification and Intelligence System (NYSIIS) アルゴリズムは、Soundex アルゴリズムの改良版として 1970 年に導入されました。NYSIIS は一部の複数文字のN-gramを処理し、相対的な母音の位置を維持しますが、Soundex はそうではありません。

ダイッチ・モコトフ・サウンデックス(D-Mサウンデックス)は、1985年に系図学者ゲイリー・モコトフによって開発され、後にゲルマン系またはスラブ系姓を持つユダヤ人にラッセル・サウンデックスを適用しようとした際に遭遇した問題(モスコヴィッツ対スラブなど)のため、系図学者ランディ・ダイッチによって改良された。モスコヴィッツまたはレバイン対ルーイン)。D-M Soundex は「Jewish Soundex」または「Eastern European Soundex」と呼ばれることもあります[17]が、著者はこれらの名前の使用を推奨していません。D-M Soundex アルゴリズムは、1 つの名前に対して最大 32 個の個別の音声エンコーディングを返すことができます。DM Soundex の結果は、100000 ~ 999999 のすべての数値形式で返されます。このアルゴリズムは、Russell Soundex よりもはるかに複雑です。

Soundex アルゴリズムの欠陥への対応として、ローレンス フィリップスは Metaphone を開発しましたフィリップスは 2000 年に Metaphone の改良版を開発し、これを Double Metaphone と呼びました。Double Metaphone には、以前のバージョンよりもはるかに大きなエンコード ルール セットが含まれており、非ラテン文字のサブセットを処理し、英語の 1 つの単語の異なる発音を考慮してプライマリ エンコードとセカンダリ エンコードを返します。フィリップスは 2009 年にさらなる改訂版として Metaphone 3 を作成し、英語の単語、アメリカ人に馴染みのある英語以外の単語、および米国で使用される姓名に対して、より高い割合で正しいエンコーディングを提供するプロフェッショナル バージョンを提供しました。また、子音と内部母音のより正確な一致を可能にする設定も提供され、プログラマーが一致の精度をより厳密に重視できるようになります。

こちらも参照

参考文献

  1. ^ ab 「Soundex インデックス システム」。国立公文書館国立公文書記録管理局2007年5月30日。2020年3月12日のオリジナルからアーカイブ2010 年12 月 24 日に取得
  2. ^ "ドキュメント: 9.1: fuzzystrmatch". PostgreSQL2020年7月23日のオリジナルからアーカイブ2012 年11 月 3 日に取得
  3. ^ "MySQL 5.5 リファレンス マニュアル :: 12.5 文字列関数". MySQLSOUNDEX(文字列)。2016年9月15日のオリジナルからアーカイブ。
  4. ^ "組み込みスケーラー SQL 関数". SQLite2022年7月16日.soundex(X)。2022年12月20日のオリジナルからアーカイブ2022 年12 月 24 日に取得
  5. ^ "SOUNDEX (Transact-SQL)". Microsoft Learn2010 年 1 月 10 日。2022 年 10 月 23 日のオリジナルからアーカイブ2012 年11 月 3 日に取得
  6. ^ 「サウンドデックス」。データベース SQL リファレンス2017 年 10 月 21 日のオリジナルからアーカイブ2017 年10 月 20 日に取得
  7. ^ 「サウンドデックス」。文字列を操作するための関数
  8. ^ "SOUNDEX — Snowflake ドキュメント". docs.snowflake.com 2023-01-16に取得
  9. ^ 「サウンドテックス」。SAP ソフトウェア ソリューション2014 年 5 月 28 日。2022 年 12 月 25 日のオリジナルからアーカイブ2021 年5 月 24 日に取得
  10. ^ "音声マッチング: より良い Soundex" . 2012 年 11 月 3 日に取得
  11. ^ オデル、マーガレット・キング (1956). 「記録管理の利益」。システムニューヨーク。20:20
  12. ^ 米国特許 1261167、RC Russell、「(無題)」、1918 年 4 月 2 日発行 (アーカイブ)
  13. ^ 米国特許 1435663、RC Russell、「(無題)」、1922 年 11 月 14 日発行(アーカイブ) 
  14. ^ クヌース、ドナルド E. (1973)。コンピューター プログラミングの技術: 第 3 巻、並べ替えと検索。アディソン・ウェスリー。391–92ページ。ISBN 978-0-201-03803-3OCLC  39472999。
  15. ^ codingForums.com ([1])
  16. ^ "MySQL :: MySQL 5.5 リファレンスマニュアル :: 12.5 文字列関数 - SOUNDEX". dev.mysql.com
  17. ^ ゲイリー・モコトフ (2007-09-08)。「サウンドエクシングと系譜学」2008 年 1 月 27 日に取得