10 komentářů k článku Elasticsearch: Vyhledáváme hezky česky (a taky slovensky):

  1. jjjjj

    diakritika
    skvely clanok, dakujem. mam vsak otazku, ako je to v takomto pripade keby hladam text bez diakritiky?

    1. Lukáš VlčekAutor příspěvku

      Re: diakritika
      Ano, diakritiku odstranit můžete. To je hezký dotaz. Můžete ji odstranit buď pomocí asciifolding token filtru [1] nebo pomocí sofistikovanějšího ICU folding token filtru [2]. Pokud použijete ICU folding, tak ten zajistí i převod na malé znaky, takže lowercase token filter už pak použít nemusíte. Podívejte se do prvního dílu [3], tak jsem o tom také psal.

      Každopádně bych diakritiku odstranil až po aplikaci hunspell filtru.

      [1] http://www.elasticsearch.org/guide/reference/index-modules/analysis/asciifolding-tokenfilter/
      [2] http://www.elasticsearch.org/guide/reference/index-modules/analysis/icu-plugin/
      [3] http://www.zdrojak.cz/clanky/elasticsearch-vyhledavame-cesky/

      1. Miroslav Hruška

        Re: diakritika
        Narazil jsem na problém s diakritikou, konkrétně se jedná například o výraz „dámský“ vs „damsky“. Můj analyzer vypadá zhruba takto:

            "cestina": {
              "type": "custom",
              "char_filter": [
                "html_strip"
              ],
              "tokenizer": "standard",
              "filter": [
                "stopwords_CZ",
                "lowercase",
                "lemmagen_cs_CZ",
                "stopwords_CZ",
                "icu_folding",
                "remove_duplicities"
              ]
            }
        

        Slovníku (hunspell ani lemmagen) se ale nedaří výrazy spojit, pokud provedu příkaz:

        curl -X POST 'localhost:9200/products_v5/_analyze?analyzer=cestina' -d 'dámská dámské dámským damskym damska damske'
        

        S výsledkem:

        {"tokens": [
        {
          "token": "damsky",
          "start_offset": 0,
          "end_offset": 6,
          "type": "<ALPHANUM>",
          "position": 0
        },
        {
          "token": "damsko",
          "start_offset": 30,
          "end_offset": 36,
          "type": "<ALPHANUM>",
          "position": 1
        },
        {
          "token": "damske",
          "start_offset": 37,
          "end_offset": 43,
          "type": "<ALPHANUM>",
          "position": 2
        }
        

        ]
        }

        Žádný slovník to prostě nezvládne převést na správný tvar a při vyhledávání je to problém. Máte někdo zkušenosti jak tohle řešit? Do vlastního slovníku se mi moc nechce, protože bych musel neustále reinsexovat X tisíc produktů a upravovat konfigurace, vytvářet nové indexy apod …

        Díky

  2. Jan Pobořil

    Publikujte výsledek
    Vypadá to, že jste to docela vyladil. Nechcete výslednou českou konfiguraci i se slovníky zveřejnit na GitHubu?

  3. Vítek

    ES 1.2.1
    Zkusil jsem popisovanou konfiguraci nad ElasticSearch 1.2.1, který aktuálně používáme a nedaří se mi to rozchodit. Když jsem si nainstaloval 0.9.0 tak samozřejmě funguje. Nevíte, Lukáši, jaké zásadní změny se v ES přihodily a co je třeba upravit? Zatím se mi nedaří nic rozumného dohledat.

    1. Lukáš VlčekAutor příspěvku

      Re: ES 1.2.1
      Zdravím,
      s příchodem ES 1.2.x došlo k pár změnám v Hunspell token filteru (a nutno podotknout, že by to měly být změny k lepšímu). Zatím jsem neměl možnost updatovat článek, ale snad se to brzy podaří. Nicméně, zkusím Vám dát pár tipů, kde bych čekal nějaký problém:

      Pokud problém přetrvá, klidně mi napište na mejl (najdete na webu). Alespoň budu mít dobrý materiál pro tvorbu dalšího dílu tohoto seriálu :-)

  4. Birkof

    Co znamenají zkratky...
    Zdravím, prosím co znamenají ta označení /JTN, /SN, /YRN, /AN …. Respektive kde k nim dohledat nějaké informace. Díky

    1. Martin Hassman

      Re: Co znamenají zkratky...

      To je z formátů oněch slovníků. Když si stáhnete české vloníky viz sekce České slovníky z OpenOffice, tak se skládají z dvou důležitých souborů:

      cs_CZ.aff # <- affixová pravidla
      cs_CZ.dic # <- seznam slov

      Aff obsahuje definice oněch JTN, SN, YRN, což jsou vzásadě skloňovací pravidla (možné předpony, přípony a koncovky, které to slovo může mít).

      Když se do něj teď dívám, tak hned na začáku je definice N, vypadá takhle:

      PFX N Y 1
      PFX N   0           ne         .
      

      Neznám přesně ten formá, ale definuje to předponu ne-. A znamená to, že ke všem slovům, které v souboru .dif budou mít /N lze přidat ne-.

      Ještě pro ukázku přiložím definici pro R, ta je:

      SFX R Y 25
      SFX R   ý           ě          [bpvmfdnt]ý
      SFX R   ý           e          [lsz]ý
      SFX R   hý          ze         [^c]hý
      SFX R   chý         še         chý
      SFX R   rý          ře         rý
      SFX R   ý           y          [sc]ký
      SFX R   ký          ce         [^sc]ký
      SFX R   í           ě          [dnt]í
      SFX R   í           e          [zž]í
      SFX R   í           eji        čí
      SFX R   ší          i          [eě]jší
      SFX R   0           ě          [bdfmnptvw]
      SFX R   g           ze         g
      SFX R   ch          še         ch
      SFX R   h           ze         [^c]h
      SFX R   k           ce         k
      SFX R   0           e          [cčjlřsšzž]
      SFX R   r           ře         r
      SFX R   o           ě          [bdfmnptvw]o
      SFX R   go          ze         go
      SFX R   cho         še         cho
      SFX R   ho          ze         [^c]ho
      SFX R   ko          ce         ko
      SFX R   o           e          [cčjlřsšzž]o
      SFX R   ro          ře         ro
      

      Ta definuje koncovky kategorie R. Čili všem slovům, ktéré mají v .dic slovníku /NR lze přidat předpony kategorie N a přípony kategorie R.

      V článku je příklad čupnutý/YRN, takže k němu patří i nečupnutý, čupnutě, nečupnutě atd.

      Dokumentace asi tady https://www.systutorials.com/docs/linux/man/4-hunspell/#lbAQ

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=9582