x3m / germanphonetic
PHP和SQL中的科隆音位学实现
This package is not auto-updated.
Last update: 2024-09-18 04:48:52 UTC
README
实现
-
Oracle PL/SQL:
x3m_soundex_ger.sql
-
PHP:
x3m_soundex_ger.php
-
Kotlin:
PhoneticConverter.kt
(由Steffen Halstrick提供 steffenhalstrick@t-online.de) -
Dart:
german_phonetics.kt
(由Steffen Halstrick <steffenhalstrick@t-online.de>)
引言
科隆音位学(也称为科隆方法)是一种音位算法,根据词的语言声音为词分配一个字符序列,即音位代码。该方法的目的是将发音相似的词分配相同的代码,以在搜索功能中实现相似性搜索。因此,例如,在姓名列表中,可以找到“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个步骤
- 根据转换表从左到右逐字母编码。
- 删除所有重复的代码。
- 删除除开头外的所有“0”代码。
示例
名字“Müller-Lüdenscheidt”的编码如下
- 逐字母编码:60550750206880022
- 删除所有重复代码:6050750206802
- 删除所有“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。