hollodotme/ cologne-phonetic
PHP OOP 实现 'Kölner Phonetic Index' - 德语语言的类似 Soundex 算法
v1.0.0
2016-02-07 17:35 UTC
Requires
- php: >=5.5
- ext-iconv: *
Requires (Dev)
- satooshi/php-coveralls: dev-master
This package is auto-updated.
Last update: 2024-09-10 05:15:50 UTC
README
ColognePhonetic
PHP OOP 实现 "Kölner Phonetik Index"。
这是一个对 Andy Theiler 的先序实现的改编,包括一些修复和单元测试。
需求
- "PHP" >= "5.5"
- "ext-iconv" "*"
安装
composer require "hollodotme/cologne-phonetic" "~1.0.0"
基本用法
<?php use hollodotme\ColognePhonetic\ColognePhonetic; $inputCharset = 'UTF-8'; $colognePhonetic = new ColognePhonetic( $inputCharset ); # Retrieve index for a single word $wordIndex = $colognePhonetic->getWordIndex( 'Wort' ); var_dump( $wordIndex ); # Retrieve index for a phrase (multiple words) # Phrase is split into words, returns an assoc. array with [ "word" => "index" ] $phraseIndex = $colognePhonetic->getPhraseIndex( 'Ein Satz mit mehreren Wörtern' ); var_dump( $phraseIndex );
输出
string(3) "072"
array(5) {
'Ein' =>
string(2) "06"
'Satz' =>
string(1) "8"
'mit' =>
string(2) "62"
'mehreren' =>
string(3) "676"
'Wortern' =>
string(5) "07276"
}
算法
"Kölner Phonetik" 将单词中的每个字符转换为一个介于 "0" 和 "8" 之间的数字代码,最多考虑一个相邻字符作为上下文。一些规则特别适用于单词的开头(初始音)。这样,相似的音素会被映射到相同的数字代码。例如,字符 "W" 和 "V" 都被转换成 "3"。 "Wikipedia" 的语音代码是 "3412"。与 "Soundex-Code" 相比,"Kölner Phonetik Index" 的长度没有限制。
关于 "SC" 在 "CH" 之前具有优先级的事实,在上表的第 10 行的 "但不是之后" 的附加说明中得到了解释。这个规则并不是官方出版物的明确部分,但可以从发表的例子中隐含地推导出来。
转写分为3个步骤
- 按照上表描述,从左到右逐个字符进行转写。
- 删除所有重复代码。
- 除了开头外,删除所有 "0" 代码。