определение преобразования soundex

при преобразовании имени «Lukasieicz» в soundex (БУКВА, ЦИФРА, ЦИФРА, ЦИФРА, ЦИФРА) я получаю 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

person Zachary williams    schedule 16.10.2015    source источник
comment
Применяете ли вы правило параллельной обработки (см. здесь)?   -  person mob    schedule 16.10.2015
comment
Не могли бы вы дать ссылку на слайды?   -  person Schwern    schedule 16.10.2015
comment
Я понял, как вы можете получить L2220, и обновил свой ответ.   -  person Schwern    schedule 16.10.2015


Ответы (1)


Если это American Soundex как определен Национальным архивом, вы оба ошибаетесь. American Soundex содержит одну букву и три цифры, у вас не может быть ни L2222, ни L2220. Это L222.

Но допустим, они добавили еще один номер по какой-то причине.

Основная замена дает L2222. Но вы должны свернуть соседние буквы с одинаковыми цифрами (шаг 3 ниже), а затем при необходимости дополнить нулями (шаг 4).

  1. Если две или более букв с одинаковым номером в исходном имени стоят рядом (до шага 1), сохраните только первую букву; также две буквы с одним и тем же номером, разделенные «h» или «w», кодируются как одно число, тогда как такие буквы, разделенные гласной, кодируются дважды. Это правило относится и к первой букве.

  2. Если в вашем слове слишком мало букв, и вы не можете присвоить [четыре] цифры, добавляйте нули, пока не будет [четыре] цифры. Если у вас более [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.

Национальный архив рекомендует онлайн-калькулятор Soundex, который выдает L220. Как и PostgreSQL и Text::Soundex как в исходном варианте, так и в реализациях NARA.

$ perl -wle 'use Text::Soundex; print soundex("Lukacz"); print soundex_nara("Lukacz")'
L220
L220

MySQL, как и ожидалось, делает свое дело и возвращает L200.

Эта функция реализует оригинальный алгоритм Soundex, а не более популярную расширенную версию (также описанную Д. Кнутом). Разница в том, что в исходной версии сначала отбрасываются гласные, а затем — дубликаты, тогда как в расширенной версии сначала отбрасываются дубликаты, а затем — гласные.


В заключение, вы забыли шаг сжатия.

person Schwern    schedule 16.10.2015