![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Mamy dwa ciągi znaków.
Dłuższy np. "Piszę w sprawie Jan Kowalski" i listę możliwych użytkowników. Chciałbym określić o jakiej osobie mowa jest w zdaniu, oczywiście najłatwiejsza opcja to sprawdzenie czy występuje w ciągu znaków imię i nazwisko oraz ewentualnie odwrotność. Ok, to mamy z z głowy, ale algorytm musi być bardziej zaawansowany i wykryć odmiany np. Jana Kowalskiego, Janka Kowalski itp. Nie zależy mi na 100% rozpoznaniu, wystarczy mi najbardziej zbliżony. Ktoś się kiedyś zmierzył? Póki co mam 3 prototypy. 1) Full index.
To najbardziej udane rozwiązanie, radzi sobie dość dobrze ale jest taki moment że po prostu się zacina i score wskakuje na zero np. przy frazie "Pawła Żyry" (ale radzi sobie jeszcze z np. "za Pawla Zyra"). Dużymm minusem jest optymalność, jak widać to wykonuje tyle zapytań ile mamy do przeszukania tytułów i nazwisk ponieważ nie da się wyszukiwać po wielu frazach. Po za tym wyszukiwanie te zachowuje się troszkę nieracjonalnie np. score jest uzależniony od innych wyników czyli zmienia się w czasie, a np. przy jednym wyniku pokazuje zero nawet gdy tekst jest 1:1. 2) Similar text Czasem daje super wyniki, czasem beznadziejne. Z pewnością było by to dobre gdybym miał pewność że w title jest tylko imię i nazwisko. 3) levenshtein Podobnie jak wyżej. 2 i 3 są znacznie szybsze i dają łatwiejszą manipulacje (np. mogę bez problemu wyciąć pl znaki i je ignorować, w mysql tego w locie nie potrafię zrobić albo byłoby to skomplikowane). Ten post edytował markonix 23.12.2018, 22:45:19 -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 07:50 |