Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Walidacja istnienia wyrazu - oraz korekta



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> PHP
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
nillvo



Dołączył: 10 Cze 2009
Posty: 67

PostWysłany: Sob Mar 26, 2016 3:56 pm  OP    Temat postu: Walidacja istnienia wyrazu - oraz korekta Odpowiedz z cytatem Pisownia

Czy ma ktoś pomysł, w jaki sposób napisać korektę błędów (podobnie jak funkcja w pakiecie OFFICE)?

Wiadomo, że potrzebna jest baza występujących słów oraz ich możliwych odmian w danym języku.
Sprawdzenie czy wyraz jest prawidłowy to oczywiście nie problem, ale w jaki sposób dopasować z bazy wyrazów, ten najbardziej podobny ? Myślałem o funkcji similar_text(), jednak nie mam pomysłu jak wykonać to praktyce. Wdzięczny będę za każdą wskazówkę.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
marcin_an



Dołączył: 26 Maj 2005
Posty: 18822

PostWysłany: Sob Mar 26, 2016 4:47 pm      Temat postu: Odpowiedz z cytatem Pisownia

Standardowo wykorzystuje się do tego odległość Levenshteina lub podobnie działającą metrykę. PHP ma tę funkcję już zaimplementowaną.

Jednak pytanie brzmi: jak duża jest baza słów i na jakie obciążenie możesz sobie pozwolić? Wykorzystując bezpośrednio funkcję levenshtein będziesz musiał wykonywać bruteforcea. Jeśli wyjdzie przepustowość rzędu 200 zapytań/h*, to będziesz miał farta.

Proponuję raczej użyć gotowych rozwiązań: np. hunspell - zakładając, że nie odstrasza cię licencja oraz możesz mieć na serwerze. Z pół miliona zapytań na godzinę spokojnie wyciągnie, czyli dużo powyżej ograniczeń nakładanych przez inne komponenty.

Rozwiązaniem pośrednim może być implementacja np. drzewa Burkharda-Kellera, najlepiej działająca jako demon lub dla zagregowanych zapytań (inaczej koszt ładowania drzewa przewyższy zyski).
____
* Przy typowych postach na forum, tylko podstawa jednego języka. Licząc stronam A4: z 20-30 sztuk na godzinę. Kilkukrotnie gorzej w przypadku wielu języków lub słownictwa specjalistycznego.

_________________
Nieaktywny od 2017-04-01
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
nillvo



Dołączył: 10 Cze 2009
Posty: 67

PostWysłany: Sob Mar 26, 2016 5:02 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Tak, Słyszałem też o funkcji levenshtein. Problem polega na tym, że baza jest spora. 80 000 słów + ich formy. Porównywanie z każdym ze słów to zbyt duże obciążenie. Nie chcę też korzystać z zewnętrznych usług.

Taki firefox, błyskawicznie podkreśla nieprawidłowy wyraz i proponuje jego poprawy, więc zakres jego zapytań do bazy musi być ściśle zawężony.

Może zapytanie wyciąga najpierw wyrazy o zbliżonej długości? -2/+2. Sprawdza w pierwszej kolejności wyrazy zaczynające się/kończące na te same litery?

Czy jest jakieś źródło porównujące szybkość działania funkcji LEVENSHTEIN w SQL a w PHP?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> PHP Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.24496 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |