Go 实现 soundex 算法
【转】http://www.syyong.com/Go/Go-implements-the-soundex-algorithm.html
SOUNDEX 返回由四个字符组成的代码 (SOUNDEX) 以评估两个字符串的相似性。
Soundex("Euler") == Soundex("Ellery"); // E460
Soundex("Gauss") == Soundex("Ghosh"); // G200
Soundex("Hilbert") == Soundex("Heilbronn"); // H416
soundex("Knuth") == Soundex("Kant"); // K530
Soundex("Lloyd") == Soundex("Ladd"); // L300
Soundex("Lukasiewicz") == Soundex("Lissajous"); // L222
Soundex
// soundex()
// Calculate the soundex key of a string.
func Soundex(str string) string {
if str == "" {
panic("str: cannot be an empty string")
}
table := []rune{
, '', '', '', // A, B, C, D
, '', '', // E, F, G
, // H
, '', '', '', '', '', // I, J, K, L, M, N
, '', '', '', '', '', // O, P, Q, R, S, T
, '', // U, V
, '', // W, X
, '', // Y, Z
}
last, code, small := -, ,
sd := make([]rune, )
// build soundex string
for i := ; i < len(str) && small < ; i++ {
// ToUpper
if str[i] < '\u007F' && 'a' <= str[i] && str[i] <= 'z' {
code = int(str[i] - 'a' + 'A')
} else {
code = int(str[i])
}
if code >= 'A' && code <= 'Z' {
if small == {
sd[small] = rune(code)
small++
last = int(table[code-'A'])
} else {
code = int(table[code-'A'])
if code != last {
if code != {
sd[small] = rune(code)
small++
}
last = code
}
}
}
}
// pad with "0"
for small < {
sd[small] = ''
small++
}
return string(sd)
}
Github地址
https://github.com/syyongx/php2go
Go 实现 soundex 算法的更多相关文章
- Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面
Atitit.跨语言 java c#.net php js常用的codec encode算法api 兼容性 应该内置到语言里面 1. 常用算法1 1.1. 目录2 1.2. 定义和用法编辑2 1.3 ...
- mysql5.5手册读书日记(2)
<?php /* * * MySQL_5.5中文参考手册 485开始 * * mysql> SELECT CASE 1 WHEN 1 THEN 'one' -> WHEN 2 THE ...
- Drools文档(八) 规则语言参考
规则语言参考 概述 Drools有一个"本地"的规则语言.这种格式在标点符号上非常轻,并且通过"扩展器"支持自然语言和领域特定的语言,使语言能够变形到您的问题领 ...
- 自然语言处理中的N-Gram模型
N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理.另外一方面,N-Gram的另外一个作用是 ...
- ElasticSearch 2 (26) - 语言处理系列之打字或拼写错误
ElasticSearch 2 (26) - 语言处理系列之打字或拼写错误 摘要 我们喜欢在对结构化数据(如:日期和价格)做查询时,结果只返回那些能精确匹配的文档.但是,好的全文搜索不应该有这样的限制 ...
- Drools 7.4.1.Final参考手册(八) 规则语言参考
规则语言参考 概述 Drools有一个“本地”的规则语言.这种格式在标点符号上非常轻,并且通过“扩展器”支持自然语言和领域特定的语言,使语言能够变形到您的问题领域.本章主要与本机规则格式一致.用于表示 ...
- Drools之基础语法
一.规则文件 标准的规则文件以”.drl”结尾. 一套完整的规则文件内容如下: package:包名,只限于逻辑上的管理,若自定义的查询或函数位于同一包名,不管物理位置如何,都可以直接调用. impo ...
- HowToDoInJava 其它教程 2 · 翻译完毕
原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 JMS 教程 JMS 教 ...
- (Sql Server)Soundex语音算法
Soundex是一种语音算法,利用英文字的读音计算近似值,值由四个字符构成,第一个字符为英文字母,后三个为数字.在拼音文字中有时会有会念但不能拼出正确字的情形,可用Soundex做类似模糊匹配的效果. ...
随机推荐
- MySQL数据库服务器逐渐变慢分析与解决
一.检查系统的状态 通过操作系统的一些工具检查系统的状态,比如CPU.内存.交换.磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能不是一个正常的状态,因为cpu可 ...
- Get Error when restoring database in Sql Server 2008 R2
When I restored a database I got an error: "The backup set holds a backup of a database ot ...
- 【JS笔记】闭包
首先看执行环境和作用域的概念.执行环境定义了变量或函数有权访问的其他数据,决定它们的行为,每个执行环境都有一个与其关联的变量对象,保存执行环境中定义的变量.当代码在一个环境中执行时,会创建变量对象的一 ...
- 给socks-proxy-agent增加认证
由于需要使用socks代理,查看了nodejs的各种socks库,最终的结论是socks库是其中最完善的,而socks-proxy-agent是以其为基础的封装,可以直接和http模块对接. 不过在尝 ...
- spring 给静态变量注入值
一般在spring中,给static变量加上@Autowired注解的时候会报空指针异常错误. 解决: 1.通过xml配置文件配置 这个就不多说了. 2.通过注解 @Component public ...
- 利用selenium自动化登录淘宝
#encoding=utf-8 from selenium import webdriver from selenium.webdriver.common.action_chains import A ...
- 1034 Head of a Gang (30 分)(图的遍历or并查集)
dfs #include<bits/stdc++.h> using namespace std; ; int mp[N][N]; int weight[N]; int vis[N]; ma ...
- 制作一个简易计算器——基于Android Studio实现
一个计算器Android程序的源码部分分为主干和细节两部分. 一.主干 1. 主干的构成 计算器的布局 事件(即计算器上的按钮.文本框)监听 实现计算 2. 详细解释 假设我们的项目名为Calcula ...
- maven仓库地址
使用Maven进行开发的时候,比较常见的一个问题就是如何寻找我要的依赖,比如说,我想要使用activeMQ,可是我不知道groupId,artifactId,和合适的version.怎么办呢?本文介绍 ...
- 【EasyNetQ】- 请求回复
EasyNetQ还支持请求/响应消息传递模式.这使得实现客户端/服务器应用程序变得容易,客户端向服务器发出请求,然后服务器处理请求并返回响应.与传统的RPC机制不同,EasyNetQ请求/响应操作没有 ...