2015-10-16 23 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描述)。不同之處在於,原始版本首先丟棄元音,然後重複第二次,而增強版本丟棄首先重複元音,第二次重複元音。


    總之,你忘記了擠一步。