<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 使用 Soundex 算法實現語音搜索 > 原文: [https://howtodoinjava.com/algorithm/implement-phonetic-search-using-soundex-algorithm/](https://howtodoinjava.com/algorithm/implement-phonetic-search-using-soundex-algorithm/) 您是否曾經想過,在任何單詞編輯器中,拼寫檢查器會如何在您遇到任何拼寫錯誤時建議您列出其他可能的單詞? 這是通過**語音搜索**完成的。 **Soundex** 是一種語音算法,用于通過聲音索引名稱(英語發音)。 我們的目標是將同音異義詞(發音與另一個單詞相同,但含義不同,并且拼寫可能有所不同)被編碼為相同的表示形式,以便盡管拼寫稍有不同(例如, `bear - beer`,`Nelson - Neilson - Neelson`等 現在,它已成為流行的數據庫軟件(例如 *DB2,PostgreSQL,MySQL,Ingres,MS SQL Server 和 Oracle*)以及一些主要單詞編輯器的標準功能。 ## Soundex 算法 該算法由羅伯特·羅素(Robert Russell)在 1910 年針對英語單詞開發。 該算法的主要原理是,輔音根據序數進行分組,最后被編碼為與其他輔音匹配的值。 它旨在通過上述過程為每個單詞找到一個代碼,稱為 soundex 代碼。 ```java The Soundex code for a name consists of a letter followed by three numerical digits: the letter is the first letter of the name, and the digits encode the remaining consonants. ``` 查找 soundex 代碼的完整算法如下: 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. 如果兩個或兩個以上具有相同編號的字母在原始名稱中相鄰(在步驟 1 之前),則僅保留第一個字母;否則,將保留第一個字母。 同樣,兩個以“`h`”或“`w`”分隔的相同數字的字母也被編碼為一個數字,而以元音分隔的此類字母被編碼兩次。 此規則也適用于首字母。 4. 重復上一步,直到有一個字母和三個數字。 如果您的單詞字母太少而無法分配三個數字,請在后面加上零,直到三個數字為止。 如果您的字母超過 3 個,則只需保留前 3 個數字即可。 ## Java 的 Soundex 實現 Soundex 算法的一種實現如下: ```java package com.howtodoinjava.examples; public class Soundex { public static String getGode(String s) { char[] x = s.toUpperCase().toCharArray(); char firstLetter = x[0]; //RULE [ 2 ] //Convert letters to numeric code for (int i = 0; i < x.length; i++) { switch (x[i]) { case 'B': case 'F': case 'P': case 'V': { x[i] = '1'; break; } case 'C': case 'G': case 'J': case 'K': case 'Q': case 'S': case 'X': case 'Z': { x[i] = '2'; break; } case 'D': case 'T': { x[i] = '3'; break; } case 'L': { x[i] = '4'; break; } case 'M': case 'N': { x[i] = '5'; break; } case 'R': { x[i] = '6'; break; } default: { x[i] = '0'; break; } } } //Remove duplicates //RULE [ 1 ] String output = "" + firstLetter; //RULE [ 3 ] for (int i = 1; i < x.length; i++) if (x[i] != x[i - 1] && x[i] != '0') output += x[i]; //RULE [ 4 ] //Pad with 0's or truncate output = output + "0000"; return output.substring(0, 4); } } ``` 讓我們看看如何使用上述算法。 ```java class Main { public static void main(String[] args) { String name1 = "beer"; String name2 = "bear"; String name3 = "bearer"; System.out.println(Soundex.getGode(name1)); System.out.println(Soundex.getGode(name2)); System.out.println(Soundex.getGode(name3)); } } Output: B600 B600 B660 ``` 從上面的輸出中很明顯,單詞“`bear`”和“`beer`”具有相同的代碼; 所以他們是語音的 “`bearer`”一詞具有不同的代碼,因為它的語音不同。 您可以查看一些可用的 soundex 算法實現,例如 [**Apache Commons Soundex 實現**](https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/language/Soundex.html)。 #### 參考文獻 [https://zh.wikipedia.org/wiki/Soundex](https://en.wikipedia.org/wiki/Soundex) [http://introcs.cs.princeton.edu/java/31datatype/Soundex.java.html](http://introcs.cs.princeton.edu/java/31datatype/Soundex.java.html) **祝您學習愉快!**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看