Morfologik – usuwanie skrótów ze słownika
Korzystając z Morfologika jako stemmera Solr należy być świadomym, że w swoim słowniku zawiera również skróty. Niesie to ze sobą efekt, który nie zawsze jest pożądany. Dla przykładu, wyszukując frazę „office pl” otrzymujemy tokeny [office, pl, plac].
Co prawda można skorzystać z mechanizmu wyrazów chronionych, ale chyba lepszy rozwiązaniem jest usunięcie skrótów bezpośrednio ze słownika Morfologika.
Kompilacja słownika
1. Klonujemy repozytorium Mofrologika i przechodzimy do katalogu projektu.
1 2 |
git clone https://github.com/morfologik/morfologik-stemming.git cd morfologik-stemming |
2. Kompilujemy projekt.
Uwaga! Wymagany jest przynajmniej Maven w wersji 3.2.5
1 |
mvn install |
3. Dla wygody kopiujemy zawartość skompilowanego subprojektu morfologik-tools do nowego, tymczasowego katalogu.
1 2 3 |
mkdir tmp cd tmp cp ../morfologik-tools/target/morfologik-tools-<VERSION>-SNAPSHOT/morfologik-tools-<VERSION>-SNAPSHOT/lib/* . |
4. Kopiujemy również oryginalny słownik polskiego.
1 |
cp ../morfologik-polish/src/main/resources/morfologik/stemming/polish/polish.* . |
5. Dekompilujemy powyższy słownik do pliku polish.txt
.
1 |
java -jar morfologik-tools-<VERSION>-SNAPSHOT.jar dict_decompile --input ../morfologik-polish/src/main/resources/morfologik/stemming/polish/polish.dict --output ./polish.txt |
6. Usunięcie skrótów zrealizujemy za pomocą skryptu, w tym celu tworzymy nowy plik wo-brev.php
oraz wypełniamy go zawartością.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $inputFile = 'polish.txt' $outputFile = 'polish-wo-brev.txt'; $sourceHandle = fopen($inputFile, 'r'); $targetHandle = fopen($outputFile, 'w'); $counter = 0; while (($line = fgets($sourceHandle)) !== false) { if (!preg_match('/;brev/', $line)) { fwrite($targetHandle, $line); } else { echo trim($line) . PHP_EOL; ++$counter; } } echo 'Usunięto ' . $counter . PHP_EOL; fclose($sourceHandle); fclose($targetHandle); |
7. Uruchamiamy skrypt z punktu 6.
1 |
php wo-brev.php |
8. Zmieniamy nazwę pliku polish.info
na polish-wo-brev.info
.
9. Nowo powstały plik polish-wo-brev.txt
kompilujemy.
1 |
java -jar morfologik-tools-<VERSION>-SNAPSHOT.jar dict_compile --input ./polish-wo-brev.txt -f CFSA2 |
Instalacja w Solr
1. Nowe pliki *.dist oraz *.info przenosimy do katalogu INSTALL_DIR/solr/server/resources
2. Definicja filtra w analzatorze wygląda następująco:
1 |
<filter class="solr.MorfologikFilterFactory" dictionary="polish-wo-brev.dict" /> |
3. Restartujemy Solr i gotowe:)
Gotowy słownik możesz pobrać z mojego serwera.
Dodaj komentarz