hollodotme/cologne-phonetic

PHP OOP 实现 'Kölner Phonetic Index' - 德语语言的类似 Soundex 算法

v1.0.0 2016-02-07 17:35 UTC

This package is auto-updated.

Last update: 2024-09-10 05:15:50 UTC


README

Build Status Coverage Status Latest Stable Version Total Downloads Latest Unstable Version License

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个步骤

  1. 按照上表描述,从左到右逐个字符进行转写。
  2. 删除所有重复代码。
  3. 除了开头外,删除所有 "0" 代码。