确定soundex转换

时间:2015-10-16 20:00:10

标签: soundex

将名称'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

1 个答案:

答案 0 :(得分:2)

如果这是American Soundex defined by the National Archives,那你就错了。 American Soundex包含一个字母和三个数字,您不能拥有L2222L2220。它是L222

但是,让我们说他们出于某种原因增加了另一个数字。

基本替换为L2222。但你应该用相同的数字折叠相邻的字母(下面的步骤3),然后在必要时用零填充(步骤4)。

  
      
  1. 如果原始名称中有两个或多个相同编号的字母(步骤1之前),则仅保留第一个字母;另外两个由'h'或'w'分隔的相同数字的字母被编码为单个数字,而由元音分隔的这些字母被编码两次。此规则也适用于第一个字母。

  2.   
  3. 如果您的单词中的字母太少而无法分配[4]个数字,请附加零,直到有[四]个数字。如果您有超过[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生成L220So does PostgreSQLText::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描述)。不同之处在于原始版本首先丢弃元音并重复第二个元素,而增强版本首先丢弃重复元素,然后省略元音。

总之,你忘记了挤压步骤。