`
starbhhc
  • 浏览: 654637 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Soundex算法

阅读更多
/**  
* 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算法实现_代码_下载

    在C#编程中,我们可以自定义实现Soundex算法来满足特定的需求。 一、Soundex算法原理 1. 首字母:Soundex算法首先保留单词的第一个字母,并将其余的字母转换为数字。首字母不进行转换。 2. 数字映射:接下来的...

    soundex-rs:美国soundex算法在Rust中的实现

    《声音编码:深入理解Rust实现的Soundex算法》 声音编码,作为一种历史悠久的语言处理技术,旨在通过一种编码方式来捕获英文单词的发音特征,从而判断它们在语音上是否相似。Soundex算法,作为声音编码的一种典型...

    retext-soundex:Soundex算法的文本重实现

    retext-soundex 算法的实现。安装 : npm install retext-soundex retext-soundex也可用于 , 和以及和的AMD,CommonJS和globals模块。用法 var retext = require ( 'retext' ) ;var inspect = require ( 'unist-...

    soundex:在 Elixir 中 Soundex 算法的实现

    Soundex 是一种将(主要是英文)名称表示为短语音代码的算法。 Soundex 代码以名称的第一个字母开头,后跟三个数字。 它们通常用于匹配发音相似的名称。 有关更多信息,请参阅。例子: iex&gt; Soundex.soundex(...

    欧拉公式求圆周率的matlab代码-soundexpy:Soundex算法的Python实现

    欧拉公式求长期率的matlab代码声音表达 仅限Python的Soundex算法的英语实现。 用法 from soundexpy import soundex soundex("euler") 执照 soundexpy在GNU通用公共许可证v2或任何更高版本的支持下可用。

    Algorithm-soundex-code.zip

    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 对额外存储空间的需求  ...

    dmetaphone_src.zip_SRC算法_vb spee_vb 音_变音_语音识别 vc

    "SRC算法"通常指的是Soundex或SoundEx算法的一个变种,这是一种早期的英文姓氏索引方法,主要用于处理和比较发音相似但拼写不同的单词。这里的"vb spee vb 音"可能是指VB中的语音处理模块,可能用于语音识别或语音...

    IndicSoundex:基于Santhosh Thottingal算法的印度语soundex php软件包

    该模块实现了用于英语的Soundex算法以及用于印度语言的soundex算法的修改版本。 这包括印度主要语言: 印地语(hi_IN) 孟加拉语(bn_IN) 旁遮普语(pa_IN) 古吉拉特语(gu_IN) 奥里亚语(or_IN) 泰米尔语(ta_...

    commons-codec-1.6-src.zip

    例如,`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. **模式匹配**:如果模糊查询的目的...

    基于MySQL的中文发音查询的元级实现.pdf

    作者于思江和王小兵分析了英文的Soundex算法,这是一种根据英文发音计算字符串值的语音算法,常用于英文发音的模糊匹配。然而,中文发音的复杂性使得直接应用Soundex并不适用。因此,他们提出了一种适用于中文发音...

    Python库 | fuzzycollections-0.0.3-py2.py3-none-any.whl

    4. **Soundex算法**:一种早期的音近字匹配算法,主要处理英文单词,通过将单词转化为一个简化的编码来判断它们的发音是否相似。 5. **Metaphone算法**:进一步改进的Soundex,提高了识别双音节和多音节词的能力。 ...

    Talisman一个简单的模块化NLP用于JavaScript的机器学习和模糊匹配库

    2. **Soundex算法**:一种基于发音的相似度计算方法,适用于音近词的匹配。 3. **Metaphone算法**:进一步改进的Soundex,考虑更多发音特性,提高匹配准确率。 **四、实际应用场景** 1. **搜索引擎**:通过模糊...

    Búsqueda aproximada TextBox ListBox_excel_

    常见的模糊搜索方法有Levenshtein距离、Jaccard相似度、Soundex算法等。在Excel VBA中,可能需要自定义一个简单的模糊匹配函数,例如通过包含通配符或使用部分字符串比较。 5. **事件驱动编程**:在VBA中,事件驱动...

    学生管理系统

    引入模糊音匹配算法,如Levenshtein距离或Soundex算法,可以实现根据读音相似度进行搜索。这些算法能计算两个字符串之间的差异程度,从而找出最接近读音的姓名。这样,用户只需输入学生姓名的大致读音,系统就能找到...

    commons-codec-1.4-bin.zip

    Apache Commons Codec还包含了对语音编码的支持,如Metaphone和Soundex算法。这些算法可以将英文单词转换为一个代表其发音的代码,有助于进行语音相似性的比较。`Metaphone`和`Soundex`类分别实现了这两种算法。 4...

    commons-codec-1.8

    `PhoneticEngine`类提供了将文本转换为类似于其发音的形式,如Metaphone、DoubleMetaphone和Soundex算法。这些算法有助于在信息检索和模糊匹配中找到相似或同音的词,例如在搜索和推荐系统中。 除此之外,Apache ...

    IOS应用源码——自动完成(就是类似百度的搜索提示)demo.rar

    可以使用简单的字符串匹配,如子串查找,或者更复杂的模糊匹配,如Levenshtein距离或Soundex算法。在实际应用中,根据性能和需求,可以选择合适的算法。 5. **动画和用户体验**: - 为了提供良好的用户体验,通常...

Global site tag (gtag.js) - Google Analytics