Może skorzystać z pomocy przy kodowaniu soundex

Amerykańskie biuro spisu powszechnego używa specjalnego kodowania o nazwie „soundex” w celu zlokalizowania informacji o osobie. Soundex to kodowanie nazwisk (nazwisk) w oparciu o sposób, w jaki brzmi nazwisko, a nie sposób, w jaki jest napisane. Nazwiska, które brzmią tak samo, ale są pisane inaczej, jak SMITH i SMYTH, mają ten sam kod i są składane razem. System kodowania soundex został opracowany w taki sposób, aby można było znaleźć nazwisko, nawet jeśli zostało zapisane w różnych pisowniach.

W tym laboratorium zaprojektujesz, kodujesz i dokumentujesz program, który generuje kod soundex przy wprowadzaniu nazwiska. Użytkownik zostanie poproszony o podanie nazwiska, a program powinien wypisać odpowiedni kod.

Podstawowe zasady kodowania Soundex

Każde kodowanie soundex nazwiska składa się z litery i trzech cyfr. Użyta litera to zawsze pierwsza litera nazwiska. Liczby są przypisane do pozostałych liter nazwiska zgodnie z przedstawionym poniżej przewodnikiem dźwiękowym. Zera są dodawane na końcu, jeśli to konieczne, aby zawsze tworzyć czteroznakowy kod. Dodatkowe litery są ignorowane.

Przewodnik po kodowaniu Soundex

Soundex przypisuje liczbę dla różnych spółgłosek. Konsumenci, którzy brzmią podobnie, mają ten sam numer:

Liczba Konsumentów

1 B, F, P, V 2 C, G, J, K, Q, S, X, Z 3 D, T 4 L 5 M, N 6 R

Soundex ignoruje litery A, E, I, O, U, H, W i Y.

Istnieją 3 dodatkowe zasady kodowania Soundex, które są przestrzegane. Dobry projekt programu zaimplementowałby je jako jedną lub więcej oddzielnych funkcji.

Zasada 1. Nazwy z podwójnymi literami

Jeśli nazwisko ma podwójne litery, powinny być traktowane jako jedna litera. Na przykład:

Gutierrez jest kodowany G362 (G, 3 dla T, 6 dla pierwszego R, drugi R ignorowany, 2 dla Z).

Reguła 2. Nazwy z literami obok siebie, które mają ten sam numer kodu Soundex

Jeśli nazwisko ma różne litery obok siebie, które mają ten sam numer w przewodniku kodowania soundex, powinny być traktowane jako jedna litera. Przykłady:

Pfister jest kodowany jako P236 (P, F ignorowane, ponieważ uważa się to samo za P, 2 za S, 3 za T, 6 za R).

Jackson jest kodowany jako J250 (J, 2 dla C, K ignorowany tak samo jak C, S ignorowany tak samo jak C, 5 dla N, 0 dodany).

Reguła 3. Separatory konsonansowe

3.a. Jeśli samogłoska (A, E, I, O, U) oddziela dwie spółgłoski, które mają ten sam kod soundex, kodowana jest spółgłoska na prawo od samogłoski. Przykład:

Tymczak jest kodowany jako T-522 (T, 5 dla M, 2 dla C, Z ignorowany (patrz reguła „Obok siebie” powyżej), 2 dla K). Ponieważ samogłoska „A” oddziela Z i K, K jest kodowana.

3.b. Jeśli „H” lub „W” rozdziela dwie spółgłoski, które mają ten sam kod soundex, spółgłoska po prawej nie jest kodowana. Przykład:

* Ashcraft jest kodowany A261 (A, 2 dla S, C ignorowany, ponieważ to samo co S z H pomiędzy, 6 dla R, 1 dla F). Nie jest kodowany A226.

Do tej pory to mój kod:

surname = raw_input("Please enter surname:")
outstring = ""

outstring = outstring + surname[0]
for i in range (1, len(surname)):
    nextletter = surname[i]
    if nextletter in ['B','F','P','V']:
        outstring = outstring + '1'

    elif nextletter in ['C','G','J','K','Q','S','X','Z']:
        outstring = outstring + '2'

    elif nextletter in ['D','T']:
        outstring = outstring + '3'

    elif nextletter in ['L']:
        outstring = outstring + '4'

    elif nextletter in ['M','N']:
        outstring = outstring + '5'

    elif nextletter in ['R']:
        outstring = outstring + '6'

print outstring

Kod w wystarczającym stopniu robi to, o co jest proszony, po prostu nie wiem, jak kodować trzy reguły. Właśnie tam potrzebuję pomocy. Tak więc każda pomoc jest doceniana.

questionAnswers(2)

yourAnswerToTheQuestion