2015-10-16 35 views
0

将名称'Lukasieicz'转换为soundex(LETTER,DIGIT,DIGIT,DIGIT,DIGIT)时,我想出了L2222。确定soundex转换

但是,我的演讲幻灯片告诉我实际的答案应该是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

您是否正在应用“并排”规则(请参阅[此处](http://stackoverflow.com/q/1626217/168657))? – mob

+0

您能否提供幻灯片的链接? – Schwern

+0

我想出了如何获得'L2220'并更新了我的答案。 – Schwern

回答

2

如果这是American Soundexdefined by the National Archives你都错了。美国Soundex包含一个字母和三个数字,您不能有L2222L2220。这是L222

但让我们说,他们因某种原因添加了另一个数字。

基本替代给出L2222。但是你应该用相同的数字折叠相邻的字母(下面的步骤3),然后根据需要填充零(步骤4)。

  • 如果两个或更多个字母与相同数目的处于原始名称相邻(前步骤1)中,只保留了第一个字母;同样由'h'或'w'分隔的相同数字的两个字母被编码为单个数字,而由元音分隔的这些字母被编码两次。这条规则也适用于第一个字母。

  • 如果您的单词中的字母太少,无法分配[四个]数字,请附加零,直到有[四个]数字。如果您有超过[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 
    

    我们可以检查有常规的(即第三号)的同音实现与表现成为L_2_22Lukacz。遵循规则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描述)。不同之处在于,原始版本首先丢弃元音,然后重复第二次,而增强版本丢弃首先重复元音,第二次重复元音。


    总之,你忘记了挤一步。