/**
* Soundex - the Soundex Algorithm, as described by Knuth
* <p>
* This class implements the soundex algorithm as described by Donald
* Knuth in Volume 3 of <I>The Art of Computer Programming</I>. The
* algorithm is intended to hash words (in particular surnames) into
* a small space using a simple model which approximates the sound of
* the word when spoken by an English speaker. Each word is reduced
* to a four character string, the first character being an upper case
* letter and the remaining three being digits. Double letters are
* collapsed to a single digit.
*
* <h2>EXAMPLES</h2>
* Knuth's examples of various names and the soundex codes they map
* to are:
* <b>Euler, Ellery -> E460
* <b>Gauss, Ghosh -> G200
* <b>Hilbert, Heilbronn -> H416
* <b>Knuth, Kant -> K530
* <b>Lloyd, Ladd -> L300
* <b>Lukasiewicz, Lissajous -> L222
*
* <h2>LIMITATIONS</h2>
* As the soundex algorithm was originally used a <B>long</B> time ago
* in the United States of America, it uses only the English alphabet
* and pronunciation.
* <p>
* As it is mapping a large space (arbitrary length strings) onto a
* small space (single letter plus 3 digits) no inference can be made
* about the similarity of two strings which end up with the same
* soundex code. For example, both "Hilbert" and "Heilbronn" end up
* with a soundex code of "H416".
* <p>
* The soundex() method is static, as it maintains no per-instance
* state; this means you never need to instantiate this class.
*
* @author Perl implementation by Mike Stok (<stok@cybercom.net>) from
* the description given by Knuth. Ian Phillips (<ian@pipex.net>) and
* Rich Pinder (<rpinder@hsc.usc.edu>) supplied ideas and spotted
* mistakes.
* @author Ian Darwin, http://www.darwinsys.com/ (Java Version)
* @version $Id: Soundex.java,v 1.9 2004/02/23 00:30:49 ian Exp $
*/
public class Soundex {
/* Implements the mapping
* from: AEHIOUWYBFPVCGJKQSXZDTLMNR
* to: 00000000111122222222334556
*/
public static final char[] MAP = {
//A B C D E F G H I J K L M
'0','1','2','3','0','1','2','0','0','2','2','4','5',
//N O P W R S T U V W X Y Z
'5','0','1','2','6','2','3','0','1','0','2','0','2'
};
/** Convert the given String to its Soundex code.
* @return null If the given string can't be mapped to Soundex.
*/
public static String soundex(String s) {
// Algorithm works on uppercase (mainframe era).
String t = s.toUpperCase();
StringBuffer res = new StringBuffer();
char c, prev = '?';
// Main loop: find up to 4 chars that map.
for (int i=0; i<t.length() && res.length() < 4 &&
(c = t.charAt(i)) != ','; i++) {
// Check to see if the given character is alphabetic.
// Text is already converted to uppercase. Algorithm
// only handles ASCII letters, do NOT use Character.isLetter()!
// Also, skip double letters.
if (c>='A' && c<='Z' && c != prev) {
prev = c;
// First char is installed unchanged, for sorting.
if (i==0)
res.append(c);
else {
char m = MAP[c-'A'];
if (m != '0')
res.append(m);
}
}
}
if (res.length() == 0)
return null;
for (int i=res.length(); i<4; i++)
res.append('0');
return res.toString();
}
/** main */
public static void main(String[] args) {
String[] names = {
"Darwin, Ian",
"Davidson, Greg",
"Darwent, William",
"Derwin, Daemon"
};
for (int i = 0; i< names.length; i++)
System.out.println(Soundex.soundex(names[i]) + ' ' + names[i]);
}
}
分享到:
相关推荐
在C#编程中,我们可以自定义实现Soundex算法来满足特定的需求。 一、Soundex算法原理 1. 首字母:Soundex算法首先保留单词的第一个字母,并将其余的字母转换为数字。首字母不进行转换。 2. 数字映射:接下来的...
《声音编码:深入理解Rust实现的Soundex算法》 声音编码,作为一种历史悠久的语言处理技术,旨在通过一种编码方式来捕获英文单词的发音特征,从而判断它们在语音上是否相似。Soundex算法,作为声音编码的一种典型...
retext-soundex 算法的实现。安装 : npm install retext-soundex retext-soundex也可用于 , 和以及和的AMD,CommonJS和globals模块。用法 var retext = require ( 'retext' ) ;var inspect = require ( 'unist-...
Soundex 是一种将(主要是英文)名称表示为短语音代码的算法。 Soundex 代码以名称的第一个字母开头,后跟三个数字。 它们通常用于匹配发音相似的名称。 有关更多信息,请参阅。例子: iex> Soundex.soundex(...
欧拉公式求长期率的matlab代码声音表达 仅限Python的Soundex算法的英语实现。 用法 from soundexpy import soundex soundex("euler") 执照 soundexpy在GNU通用公共许可证v2或任何更高版本的支持下可用。
Soundex算法的基本思想是保留单词的首字母,并根据音节将后续字母转换为数字代码,忽略不发音的字母和元音。 **算法实现** 在“soundex-code-master”目录下,我们可以找到实现Soundex编码的源代码。这个实现通常...
4.10.6 Soundex算法和Metaphone算法 第5章 排序 5.1 排序的基本特征 5.1.1 稳定性 5.1.2 对哨兵的需求 5.1.3 对链表进行排序的能力 5.1.4 输入的阶的相关性 5.1.5 对额外存储空间的需求 ...
"SRC算法"通常指的是Soundex或SoundEx算法的一个变种,这是一种早期的英文姓氏索引方法,主要用于处理和比较发音相似但拼写不同的单词。这里的"vb spee vb 音"可能是指VB中的语音处理模块,可能用于语音识别或语音...
该模块实现了用于英语的Soundex算法以及用于印度语言的soundex算法的修改版本。 这包括印度主要语言: 印地语(hi_IN) 孟加拉语(bn_IN) 旁遮普语(pa_IN) 古吉拉特语(gu_IN) 奥里亚语(or_IN) 泰米尔语(ta_...
例如,`src/main/java/org/apache/commons/codec/language/Soundex.java`包含了Soundex算法的实现。 4. **Hex编码与解码**: Hex编码是一种将二进制数据转换为16进制字符串的方法。在`src/main/java/org/apache/...
3. Soundex算法:Soundex是一种早期的音近匹配算法,主要处理英文地址,通过对单词进行编码来捕捉发音相似性。 4. Metaphone算法:Metaphone是Soundex的改进版,更准确地反映了单词的发音相似性。 5. 中文模糊匹配...
常见的有Levenshtein距离(编辑距离)、Soundex算法(声音相似度)等。在易语言中,可以自定义实现这些算法,通过比较字节集间的差异来判断两个字节集是否满足模糊匹配条件。 3. **模式匹配**:如果模糊查询的目的...
作者于思江和王小兵分析了英文的Soundex算法,这是一种根据英文发音计算字符串值的语音算法,常用于英文发音的模糊匹配。然而,中文发音的复杂性使得直接应用Soundex并不适用。因此,他们提出了一种适用于中文发音...
4. **Soundex算法**:一种早期的音近字匹配算法,主要处理英文单词,通过将单词转化为一个简化的编码来判断它们的发音是否相似。 5. **Metaphone算法**:进一步改进的Soundex,提高了识别双音节和多音节词的能力。 ...
2. **Soundex算法**:一种基于发音的相似度计算方法,适用于音近词的匹配。 3. **Metaphone算法**:进一步改进的Soundex,考虑更多发音特性,提高匹配准确率。 **四、实际应用场景** 1. **搜索引擎**:通过模糊...
常见的模糊搜索方法有Levenshtein距离、Jaccard相似度、Soundex算法等。在Excel VBA中,可能需要自定义一个简单的模糊匹配函数,例如通过包含通配符或使用部分字符串比较。 5. **事件驱动编程**:在VBA中,事件驱动...
引入模糊音匹配算法,如Levenshtein距离或Soundex算法,可以实现根据读音相似度进行搜索。这些算法能计算两个字符串之间的差异程度,从而找出最接近读音的姓名。这样,用户只需输入学生姓名的大致读音,系统就能找到...
Apache Commons Codec还包含了对语音编码的支持,如Metaphone和Soundex算法。这些算法可以将英文单词转换为一个代表其发音的代码,有助于进行语音相似性的比较。`Metaphone`和`Soundex`类分别实现了这两种算法。 4...
`PhoneticEngine`类提供了将文本转换为类似于其发音的形式,如Metaphone、DoubleMetaphone和Soundex算法。这些算法有助于在信息检索和模糊匹配中找到相似或同音的词,例如在搜索和推荐系统中。 除此之外,Apache ...
可以使用简单的字符串匹配,如子串查找,或者更复杂的模糊匹配,如Levenshtein距离或Soundex算法。在实际应用中,根据性能和需求,可以选择合适的算法。 5. **动画和用户体验**: - 为了提供良好的用户体验,通常...