Witajcie.
Mam małą zagwozdkę. Mam bazę danych z tabelą zawierającą adresy:
- miasto,
- ulica,
- kod pocztowy,
- numer domu.
Przykładowo: 84-00 Kraków, Królewny Śnieżki 12
Muszę zrobić skrypt sprawdzający czy dany adres znajduje się w bazie danych.
Problemem jest format wprowadzanych danych przez użytkowników:
- użytkownicy wpisują np. Kraków 84-00, Dworcowa dwanaście (liczba słownie),
- Warszawa, ulica Katowice 12 mieszkanie cztery (dopisują "mieszkanie", "przez" etc oraz mieszkają cyfry pisane z liczbami).
Założenie: nie mogę zmienić formatu bazy danych oraz nie mam wpływu na wprowadzanie danych przez użytkowników (dane pochodzą z zewnętrznej aplikacji, na którą nie mam wpływu).
Jak byście rozwiązali powyższy problem?
Nie da się tego jednoznacznie sprawdzić, niestety. Jak mówisz że ludzie wpisują adres słownie, to nie dasz rady tego rozróżnić, bo są ulice które mają liczebniki w nazwie, np "Aleja Trzech Króli". Pewnie znajdzie się ulica która ma w nazwie "jeden", "dwa", "trzy", "sto", "tysiąc". Dodatkowo, ludzie mogą wpisać liczbę z błędem, np "Dworcowa dwanści" (be e
) i skąd wtedy program ma wiedzieć czy to liczebnik czy część ulicy?
No ale jeśli chcesz do tego jakoś podejść, to:
- rozdziel wprowadzony adres po spacjach i przecinkach na listę słów
- usuń wszystkie znaki które wiesz że nie należą do adresu: "przez", "mieszkanie", "mieszkania".
- zrób mapę liczb
{jeden:1, dwa:2, trzy:3, "dwadzieścia trzy":23}
i zamień część słów na liczby
Ale jak mówiłem, to nie są żadne rozwiązania które dadzą Ci jakiś wiarygodny wynik. Najlepiej byłoby pokazać userowi listę adresów pasujących do wpisanego słowa, i spytać go czy to jest poprawny adres czy nie.