incompatibility według Levenshteina...

0

Pisze prostą wyszukiwarkę plików / zasobów na dysku. Znalazłem podobny temat procentowa zgodność tekstów

polecono tam wykorzystać Algorytm Levenshteina - wyszukałem, zapoznałem się, zaimplementowałem do swoich potrzeb, jednak wyniki jakie uzyskuje nie do końca mnie satysfakcjonują, podam przykład ::

pełna nazwa szukanego pliku na dysku ::

std::string source_base( "zaawansowane c++ wraz z bibliotekami boost" );

tekst podany w wyszukiwarce

std::string source_search( "c++ i boost" );

na wyjściu uzyskuje :: compatibility :: 27 %
problem w tym że każdy znak w tekście ma taką samą wagę i pomimo podania 2 słów można je nazwać kluczowymi ( c++, boost ) plik nie zostałby wyszukany z powodu zbyt małej zgodności dla której min ustawiłem na 75 %. Nie chciałbym zmniejszać dopuszczalnego min zgodności więc co mogę zrobić aby dodać mojej wyszukiwarce trochę "inteligencji" ;) ?
Wypróbowałem już opcje z podzieleniem szukanej frazy na części, wrzuceniem tego do std::vector i sprawdzaniu czy podane słowa / znaki występują w oryginale za pomocą std::string::find ale to też się nie sprawdziło...
mogę prosić o podrzucenie jakiegoś pomysłu, wskazówek?

1

Dzielenie na słowa + cosine similarity? :)
Albo miara Jaccarda, albo nawet lepiej: zmodyfikowana wersja miary jaccarda gdzie zamiast sumy zbiorów w mianowniku masz rozmiar jednego ze zbiorów (liczysz to dla obu zbiorów a potem bierzesz to dla którego masz większy wynik).

http://en.wikipedia.org/wiki/Cosine_similarity
http://en.wikipedia.org/wiki/Jaccard_index
http://en.wikipedia.org/wiki/Bag-of-words_model

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.