你有没有想过拼写检查器,在任何单词编辑器中,如何在你有任何拼写错误时建议你一个可能的其他单词列表?这是使用拼音搜索完成的。 Soundex 是一种语音算法,用于按英语发音对名称进行索引。目标是将同音词(发音与另一个词相同但含义不同,拼写可能不同)编码为相同的表示形式,以便尽管拼写存在微小差异,但它们仍可以匹配,例如bear - beer
, Nelson - Neilson - Neelson
等
它现在是流行数据库软件的标准功能,例如 DB2、PostgreSQL、MySQL、Ingres、MS SQL Server 和 Oracle 以及一些主要的文字编辑器。
该算法由 Robert Russell 于 1910 年针对英语单词开发。该算法背后的主要原则是辅音根据序数分组,最后编码成一个值,其他辅音与之匹配。它旨在通过上述过程为每个单词找到一个代码,称为 soundex 代码。
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 代码的完整算法如下:
Soundex算法的一种实现如下:
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); } }
让我们看看它如何使用上述算法。
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://en.wikipedia.org/wiki/Soundex http://introcs.cs.princeton.edu/java/31datatype/Soundex.java.html
快乐学习!!
地址:https://www.cundage.com/article/implement-phonetic-search-using-soundex-algorithm.html