Porównywanie słów.

0

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:

  1. "Słowo pierwsze z dwoch"
  2. "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:

  1. "Słowopierwszezdwoch"
  2. "Słowodrugiekwoch"

ale odpowiednie przesunięcie:

  1. "Słowopierwszezdwoch"
  2. "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.

0

Wiki odległość levenshteina.
Odradzam ci posługiwanie się procentami, odległość jest wygodniejsza.

0

Możesz też zaimplementować polski Soundex.
Na pewno znajdziesz gdzieś gotowca.

Ale spróbuj najpierw Levenshteina.

http://www.algorytm.org/przetwarzanie-tekstu/odleglosc-levenshteina-odleglosc-edycyjna.html

0
MarekR22 napisał(a):

Odradzam ci posługiwanie się procentami, odległość jest wygodniejsza.
Nie nie. Procenty mają służyć tylko pokazania gotowego wyniku % zgodności. Wg założeń - ciągi są zmatchowane, jeżeli % "podobności" >=70

EDIT: Aha. I bardzo dzięki za konkretne odpowiedzi w tak krótkim czasie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1