2012-07-11 11 views
5

Używam ElasticSerach i chcę ustawić podstawowe tłumaczenie dla języka angielskiego. Więc, w zasadzie, wojownik powraca walkę lub jakiekolwiek słowo zawierające korzeń walki.ElasticSearch Stemming

Jestem trochę zdezorientowany, jak to wdrożyć. Czytałem przez analizatory, tokenizery i filtry i istnieje wiele algorytmów rozstrzygających, które można zastosować w ElasticSearch. Po prostu nie jestem pewien, której kombinacji użyć - kuli śnieżnej, łodygi, łodygi portera lub synonimów.

Również przykład mapowania byłby bardzo pomocny.

Odpowiedz

15

Należy pamiętać o difference between stemming and lemmatisation. Algorytm stemmingowy stosuje szereg reguł (i/lub odnośników do słownika, jak to jest na przykład w przypadku KStem) i nie gwarantuje, że wynikiem będzie właściwy "root" (tj. Lemma).

Na przykład oba słowa "marynować" i "marines" zostaną zamienione na "marin" przez porter stemmer, który jest uważany za dość "agresywny" - ma tendencję do wytwarzania tej samej łodygi dla dużej liczby słów . Są bardziej konserwatywne, jak na przykład S-Stemmer, który konwertuje tylko formy liczby pojedynczej do liczby pojedynczej (org.apache.lucene.analysis.en.EnglishMinimalStemFilter).

Porównania wynikające sposobów znalezionych w pracach badawczych wydaje się sprzyjać KStem jako najbardziej skuteczny w przypadku tekstów angielskich, ale wybór Stemmer silnie zależy od słownika dokumentów. Nie dążysz do optymalizacji wydajności trzpienia, ale raczej wydajności wyszukiwarki, więc pomiary w oderwaniu od innych elementów twojego systemu (szczególnie ekspansji zapytań) nie są dobrym pomysłem w praktyce.

Najlepszym rozwiązaniem jest wypróbowanie wielu różnych programów do analizy, które są dostępne w elastycznym wyszukuwaniu (przykład mapowania można zobaczyć here) i obserwować precyzję i zapamiętywanie wyników. Jeśli nie masz zestawu pytań testowych, najlepiej jest wykonywać "typowe" zapytania i uważać na "dziwne" wyniki (efekty łodygi są zbyt agresywne) lub "dobre" wyniki są anulowane (zbyt konserwatywne trzonek).