Analiza języka polskiego w Solr

,

Nie ma jednej recepty na analizę języka w Solr. Tak na prawdę wszystko zależy od kontekstu. Inaczej sprawa będzie przedstawiać się w przypadku przeszukiwania obszernych tekstów inaczej krótkich zwartych fraz. Odmiennie, jeśli dane w kolekcji są w jakiś sposób zarządzane, lub są to teksty wpisywane przez użytkowników.

Schemat

W przypadku sklepu internetowego z zarządzaną treścią, zadowalające rezultaty daje poniższy schemat.

Opis linii:
3StandardTokenizerFactory usuwa znak „+”. Zazwyczaj jest to jak najbardziej słuszne, problem występuje wtedy, gdy użytkownik szuka „galaxy s8+”. Warto, aby s8+ było „wyżej” w wynikach od s8. Filtr zamienia znak „+” na wyraz „@PLUS@”. Znak małpy sprawia, że tokenizer utworzy nowy token „plus” zamiast łączyć go z obecnie przetwarzanym.

7 – Rozdzielenie wyrazów ze względu na wielkość liter. Dla przykładu DualSim daje {Dual, Sim}. Warto zwrócić uwagę na parametr preserveOriginal. Powoduje on dodanie oryginalnego tokenu. Ma to sen, kiedy użytkownik będzie wyszukiwał dualsim (pisany małymi literami).

17 – Filtr niezbędny w trakcie indeksacji (type="index") po użyciu solr.WordDelimiterGraphFilterFactory.

19 – Rozbicie tokenów ze względu na obecność cyfr. Dla przykładu „NS30” daje {NS, 30}. Tak jak w linii 7, także tutaj warto zwrócić uwagę na parametr preserveOriginal. Pozwoli to na definiowanie chronionych wyrazów bez potrzeby indeksowania całej kolekcji.

30 – Powielenie tokenów, aby zachować oryginały przed lematyzatorem. Jest to niezbędne ze względu na wyrazy chronione, jak w linii 19.

31 – Morfologik ze słownikiem pozbawionym skrótów.

34 – Nie wszystkie tokeny zostaną sprowadzone do formy podstawowej. Jako, że wcześniej je powieliliśmy, powstaną niepotrzebne duplikaty. Filtr solr.RemoveDuplicatesTokenFilterFactory usunie je, jeśli znajdują się na tej samej pozycji.

41 – Dodany jest filtr usuwający wyrazy powszechne („do”, „w”, „a” itd.).

44 – Warto zwrócić uwagę na preserveOriginal ustawiony na 0 oraz brak filtra solr.FlattenGraphFilterFactory.

56 – Tak samo jak w przypadku 44.

67 – Dodany jest filtr do obsługi synonimów. W tym miejscu warto napisać więcej o synonimach wielowyrazowych. Do wersji 6.4, Solr nie radził sobie z nimi najlepiej. Na szczęście to już przeszłość, wystarczy tylko pamiętać, aby ustawić parametr sow na true. W Solr 7 nie jest to już wymagane.

BM25 czy TFIDF

Domyślnym algorytmem podobieństwa dla Solr 6 i późniejszych jest BM25. Warto na chwilę się zastanowić, czy rzeczywiście w Twoim przypadku jest to najlepszy wybór? W moim okazało się, że znacznie lepsze rezultaty daje algorytm TFIFD z tym, że pozbawiony wektora IFD, tak na poniższym listingu.

Dzięki temu istotność tokenu nie jest powiązana z krotnością w kolekcji. Tokeny pralka, lodówka czy telewizor mają taką samą wagę.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *