将名称'Lukasieicz'转换为soundex(LETTER,DIGIT,DIGIT,DIGIT,DIGIT)时,我想出了L2222。
然而,我的演讲幻灯片告诉我,实际答案应该是L2220。
请解释为什么我的答案不正确,或者演讲答案只是一个错字或什么的。
我的步骤:
Lukasieicz
remove and keep L
ukasieicz
Remove contiguous duplicate characters
ukasieicz
remove A,E,H,I,O,U,W,Y
KSCZ
convert up to first four remaining letters to soundex (as described in lecture directions)
2222
append beginning letter
L2222
答案 0 :(得分:2)
如果这是American Soundex defined by the National Archives,那你就错了。 American Soundex包含一个字母和三个数字,您不能拥有L2222
或L2220
。它是L222
。
但是,让我们说他们出于某种原因增加了另一个数字。
基本替换为L2222
。但你应该用相同的数字折叠相邻的字母(下面的步骤3),然后在必要时用零填充(步骤4)。
如果原始名称中有两个或多个相同编号的字母(步骤1之前),则仅保留第一个字母;另外两个由'h'或'w'分隔的相同数字的字母被编码为单个数字,而由元音分隔的这些字母被编码两次。此规则也适用于第一个字母。
- 醇>
如果您的单词中的字母太少而无法分配[4]个数字,请附加零,直到有[四]个数字。如果您有超过[4]个字母,请保留第一个[4]数字。
Lukasieicz # the original word
L_2_2___22 # replace with numbers, leave the gaps in
L_2_2___2 # apply step 3 and squeeze adjacent numbers
L2220 # apply step 4 and pad to four numbers
我们可以检查常规(即三个数字)soundex实现如何使用变为Lukacz
的较短L_2_22
。遵循规则3和规则4,它应该是L220
。
National Archives建议online Soundex calculator生成L220
。 So does PostgreSQL和Text::Soundex的原始风格和NARA实施。
$ perl -wle 'use Text::Soundex; print soundex("Lukacz"); print soundex_nara("Lukacz")'
L220
L220
MySQL,可以预见,is doing its own thing and returns L200
。
此函数实现了原始的Soundex算法,而不是更受欢迎的增强版本(也由D. Knuth描述)。不同之处在于原始版本首先丢弃元音并重复第二个元素,而增强版本首先丢弃重复元素,然后省略元音。
总之,你忘记了挤压步骤。