Jak nauczyć słonia języka polskiego?

Nasz poczciwy słonik – PostgreSQL niestety nie nauczył się jeszcze naszego ojczystego języka (na czas pisania artykułu – oby kiedyś się to zmieniło). Jest to pewien problem, ponieważ chcąc skorzystać w full text search’a, rezultaty mogą być średnie, lub złe, ponieważ baza nie wie które słowa są ważne a które nie. Dlatego aby pomóc naszemu słonikowi, potrzebujemy dwóch rzeczy.

  • Listy mniej znaczących oraz popularnych słów (tzw. stopwords)
  • Słownik języka polskiego 😉

Zacznijmy od pobrania pliku polish.stopwords.txt, następnie potrzebujemy słownika, najlepiej go pobrać ze strony sjp.pl (wersja źródłowa ispell: sjp-ispell-pl-<data_pliku>-src.tar.bz2).

Po rozpakowaniu i umieszczeniu pobranych plików w jednym katalogu, musimy zmienić kodowanie znaków na UTF-8 poleceniem iconv, oraz pozmieniać nazwy plików.

$ iconv -f ISO_8859-2 -t utf-8 polish.aff > polish.affix
$ iconv -f ISO_8859-2 -t utf-8 polish.all > polish.dict
$ mv polish.stopwords.txt polish.stop

Następnie skopiujmy pliki do katalogu konfiguracyjnego bazy danych.

$ sudo su
$ cp polish.affix `pg_config --sharedir`/tsearch_data/
$ cp polish.dict `pg_config --sharedir`/tsearch_data/
$ cp polish.stop `pg_config --sharedir`/tsearch_data/

Na sam koniec zostaje skonfigurowanie „polskiej wyszukiwarki” w samym postgresie.

CREATE TEXT SEARCH DICTIONARY pl_ispell (
  Template = ispell,
  DictFile = polish,
  AffFile = polish,
  StopWords = polish
);

CREATE TEXT SEARCH CONFIGURATION pl_ispell(parser = default);

ALTER TEXT SEARCH CONFIGURATION pl_ispell ALTER MAPPING FOR asciiword, asciihword, hword_asciipart, word, hword, hword_part WITH pl_ispell;

Gotowe, teraz podając jako parametr konfiguracyjny nazwę słownika „pl_ispell” możemy wykonywać zapytania w języku polskim!

Zobacz dokumentację PostreSQL’a aby dowiedzieć się więcej.


Photo by Will Shirley on Unsplash