Muszę przygotować kawałek kodu, który będzie porównywał dwa zestawy słów i będzie zwracał wartość procentową matchowania.
Sens jest taki. Mamy dwa zestawy słów:
- "Słowo pierwsze z dwoch"
- "Słowo drugie kwoch"
a) Na początku określam, który ciąg jest dłuższy - wartość będzie reprezentowała 100%
b) Usuwam znaki specjalne (taki wymóg algorytmu) - jak ",./';: itp. oraz spacje z obu ciągów
c) Zamieniam wszystkie litery na małe (taki wymóg algorytmu - case insensitive)
d) Porównuję litera po literze matchowanie - zapisując na boku ile znaków jest zgodnych na swoich pozycjach
Generalnie "jakoś" to działa, ale potrzebuję jeszcze obsłużyć sytuacje, kiedy odpowiednie przesunięcie słów może dać lepsze matchowanie.
To znaczy - na podstawie powyższego przykładu - aktualny algorytm porówna coś takiego:
- "Słowopierwszezdwoch"
- "Słowodrugiekwoch"
ale odpowiednie przesunięcie:
- "Słowopierwszezdwoch"
- "Słowodrugie kwoch"
Da trochę lepsze matchowanie.
Oczywiście - przykład nie jest idealny, bo algorytm ma faktycznie porównywać zestawy ciągów (nazwy klientów) z czarną listą.
Chodzi o to: Czy może ktoś ćwiczył już podobny problem, w którym użytkownik może podać fragmenty słów, błędnie zapisane słowa, częściowo zgodne słowa, a algorytm i tak jakoś dopasuje do wzorca.
Perfekcyjne do tego zadania jest SQLowe SOUNDEX, ale Oracle'owa implementacja obsługuje jedynie fonetykę angielską, która nijak ma się do polskiej.