x3m/germanphonetic

PHP和SQL中的科隆音位学实现

安装数: 3,545

依赖: 0

建议者: 0

安全性: 0

星级: 36

关注者: 7

分支: 11

开放问题: 3

语言:Dart

dev-master 2022-05-24 12:28 UTC

This package is not auto-updated.

Last update: 2024-09-18 04:48:52 UTC


README

实现

引言

科隆音位学(也称为科隆方法)是一种音位算法,根据词的语言声音为词分配一个字符序列,即音位代码。该方法的目的是将发音相似的词分配相同的代码,以在搜索功能中实现相似性搜索。因此,例如,在姓名列表中,可以找到“Meier”这样的条目,也可以找到“Maier”、“Mayer”或“Mayr”等其他写法。

与更著名的Russell-Soundex方法相比,科隆音位学更适合德语。它于1969年由Postel发布。

算法

科隆音位学将每个词的字母映射到“0”和“8”之间的一个数字,其中选择每个数字时最多使用一个相邻字母作为上下文。一些规则专门针对词首(音素)。这样,将相似的音分配相同的代码。例如,“W”和“V”这两个字母被编码为数字“3”。根据科隆音位学,“Wikipedia”的音位代码为“3412”。与Soundex代码不同,根据科隆音位学的音位代码长度不受限制。

字母“C”的规则“SC”比规则“CH”优先,这在表格第10行的“außer nach S, Z”附加说明中得到了考虑。虽然原始出版物没有明确提到这一点,但可以从那里列出的例子中推断出来(例如,“Breschnew”的代码为“17863”)。

单词转换分为3个步骤

  1. 根据转换表从左到右逐字母编码。
  2. 删除所有重复的代码。
  3. 删除除开头外的所有“0”代码。

示例

名字“Müller-Lüdenscheidt”的编码如下

  1. 逐字母编码:60550750206880022
  2. 删除所有重复代码:6050750206802
  3. 删除所有“0”代码:65752682

代码示例

PHP

require_once 'x3m_soundex_ger.php';
$phoneticcode = soundex_ger("Meier");

Oracle PL/SQL

函数:SOUNDEX_GER()
Select SOUNDEX_GER('Meier'), SOUNDEX_GER('Meyer') from Dual
函数:SOUNDEX_GER_MW()

函数SOUNDEX_GER_MW()作为函数SOUNDEX_GER()的多词包装器。也就是说,该函数将输入字符串拆分为单个单词,并用SOUNDEX_GER()对每个单词进行编码。

Select SOUNDEX_GER_MW('Mueller Luedenscheidt') from Dual

多词函数之所以重要,是因为即使是网络上通常记录的例子Müller-Lüdenscheidt其实也是错误的。Müller-Lüdenscheidt是两个单词,因此有两个音素开头和两个音素结尾。在这个例子中,这种情况没有显现出来,但是例如Heinz Classen(与通常编码的HeinzClassen不同)。如果用通常的实现来对“Heinz Classen”进行编码,并且忽略它是两个单词的事实,那么会得到068586,其中Z编码为8,C也编码为8,第二个8被省略。如果将其作为两个单词处理,则C编码为4并保留,即068 4586。