編碼 | 解碼 | 壓縮

> soundex | 語音編碼 | 模糊比對 <

// Soundex —— 依發音為姓名建立索引的語音演算法

[PHONETIC]

以發音為基礎

依照姓名的發音而非拼寫進行編碼。

[FUZZY]

模糊比對

可以找出發音相近但寫法不同的姓名。

[GENEALOGY]

族譜與歷史

適用於族譜研究、人口普查與歷史檔案查詢。

>> 技術說明

Soundex 的運作原理:

Soundex 會保留姓名的第一個字母,並將其餘子音依照語音分組對應到數字;發音類似的子音會得到相同的數字,而母音則被忽略。American Soundex 產生固定 4 碼的編碼,Refined Soundex 則使用更細緻的分組與可變長度編碼。

編碼規則:

1 = B,F,P,V 2 = C,G,J,K,Q,S,X,Z 3 = D,T 4 = L 5 = M,N 6 = R Robert → R163 Rupert → R163 Rubin → R150

為什麼要用 Soundex?:

  • >資料庫去重與模糊搜尋
  • >族譜 / 家族史研究
  • >人口普查資料分析
  • >客戶資訊比對與合併
  • >拼寫錯誤偵測與修正

>> 常見問題

什麼是 Soundex?

Soundex 是 1918 年提出的一種語音演算法,用來根據發音為姓名建立索引。最早是為了美國人口普查設計,讓使用者可以在拼寫不同的情況下,依照發音找到相近的姓氏。

American 與 Refined Soundex 有何不同?

American Soundex 產生 4 字元編碼(首字母 + 3 位數字)。Refined Soundex(例如 SQL Server 中採用)使用更細的對應表與可變長度編碼,以提高比對準確度。

為什麼不同的拼寫會出現相同的編碼?

這正是 Soundex 的目的:將發音接近的姓名視為同一群組。像 Smith 和 Schmidt 這樣的姓氏,發音相近,因此會獲得相同或相近的 Soundex 編碼,方便在資料庫中搜尋各種變體。

Soundex 有哪些限制?

Soundex 主要是為英語姓名設計的,對其他語言的姓名表現可能有限;而且若同一姓名的拼寫差異過大,也可能產生不同的編碼。

// 速查表

DigitLetters
1B F P V
2C G J K Q S X Z
3D T
4L
5M N
6R
—A E I O U Y H W (skipped)

// 程式碼範例

1. Keep the first letter.
2. Replace the other letters with digits (table above).
3. Drop vowels and Y; H and W are skipped (letters on both sides of H/W
   with the same code collapse into one digit).
4. Collapse adjacent identical digits.
5. Pad with 0 or truncate to letter + 3 digits.

Robert -> R163   Rupert -> R163   Rubin -> R150
Ashcraft -> A261   Tymczak -> T522   Pfister -> P236

>> 更多問題

問:為什麼 Robert 和 Rupert 的 Soundex 編碼相同?

答:兩者都以 R 開頭,其餘子音按組編碼:B/P → 1、R → 6、T → 3,得 R163。Soundex 把發音相近的子音歸為一組,因此同一姓名的拼寫變體常能相符。

問:Soundex 如何處理 H 和 W?

答:H 和 W 被跳過且不起分隔作用:兩側子音編碼相同時算同一個音。因此 Ashcraft 得 A261 而非 A226。母音則起分隔作用。

問:Soundex 有哪些限制?

答:它為英語姓名設計(Russell 與 Odell 於 1918/1922 年的專利),首字母之後的發音差異不予區分。首字母不同的名字,如 Catherine 與 Katherine,無法相符。

其他語言