Elasticsearch Sudachi

閲覧数: 5(0)

Sudachiプラグインである。最新バージョンではElasticsearchの古いバージョンがサポートされなくなった。このサイトは7.10.2で稼働しているので最新のプラグインはサポート対象外となる。というわけで、開発元のGitHubから古いブランチを落としてきて7.10.2対応のプラグインを作成する手順を残しておくことにする。まずは古いブランチのクローンから。

git clone -b v3.3.0 https://github.com/WorksApplications/elasticsearch-sudachi

ビルドは以下のコマンドを実行する。

./gradlew -PengineVersion=es:7.10.2 build

正常に終了すると、build/distributions/フォルダにプラグインが作成される。プラグインのインストールは以下のコマンドで行う。

./elasticsearch-plugin install file:///file/path/elasticsearch-7.10.2-analysis-sudachi-3.3.1.zip

ユーザー辞書のビルドにはSudachipyが必要なのでインストールするのだが、CPUがARM系だとひと手間余分にかかるので注意が必要。RustのToolchainのインストールとPythonのパッケージが必要なので、以下のコマンドで追加する。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
pip install setuptools_rust

shellを再起動してrustのパスを有効化する。そして以下のコマンドでSudachipyのインストールを行う。

pip install sudachipy sudachidict_full

ユーザー辞書は以下のようなテキストファイル(user_dic.txtなど)を作成しておく。

ローグ・ワン,4786,4786,-32768,ローグ・ワン,名詞,固有名詞,一般,*,*,*,ローグワン,ローグ・ワン,*,*,*,*,*
rogue one,4786,4786,-32768,rogue one,名詞,固有名詞,一般,*,*,*,ローグワン,ローグ・ワン,*,*,*,*,*
rogueone,4786,4786,-32768,rogueone,名詞,固有名詞,一般,*,*,*,ローグワン,ローグ・ワン,*,*,*,*,*

ユーザー辞書のビルドは以下のコマンドで行う。

sudachipy ubuild -d full -o user_dict.dic -s <sudachi_dict> user_dic.txt

SudachiのElasticsearch用設定ファイル(sudachi.json)と辞書は、/etcの下のElasticsearch用フォルダ(/etc/elasticsearchなど)のsudachiフォルダ(/etc/elasticsearch/sudachi)下に置いておく。sudachi.jsonの内容は以下の通り。

{
    "systemDict" : "system_full.dic",
    "inputTextPlugin" : [
        { "class" : "com.worksap.nlp.sudachi.DefaultInputTextPlugin" },
        { "class" : "com.worksap.nlp.sudachi.ProlongedSoundMarkInputTextPlugin",
          "prolongedSoundMarks": ["ー", "-", "?", "~", "?"],
          "replacementSymbol": "ー"}
    ],
    "oovProviderPlugin" : [
        { "class" : "com.worksap.nlp.sudachi.MeCabOovProviderPlugin" },
        { "class" : "com.worksap.nlp.sudachi.SimpleOovProviderPlugin",
          "oovPOS" : [ "補助記号", "一般", "*", "*", "*", "*" ],
          "leftId" : 5968,
          "rightId" : 5968,
          "cost" : 3857 }
    ],
    "pathRewritePlugin" : [
        { "class" : "com.worksap.nlp.sudachi.JoinNumericPlugin",
          "joinKanjiNumeric" : true },
        { "class" : "com.worksap.nlp.sudachi.JoinKatakanaOovPlugin",
          "oovPOS" : [ "名詞", "普通名詞", "一般", "*", "*", "*" ],
          "minLength" : 3
        }
    ]
}

ElasticPressの辞書指定は以下の通り。

'analysis'                         => array(
    'tokenizer' => array(
        'sudachi_tokenizer' => array(
            'type' => 'sudachi_tokenizer',
            'split_mode' => 'A',
            'additional_settings' =>  '{"systemDict":"system_full.dic","userDict":["user_dict.dic"]}'
        ),
    ),
    'analyzer'   => array(

ここでは「additional_settings」でダイレクトにシステム辞書とユーザー辞書を指定する方法とした。

カテゴリーIT閑話, 公開タグ, , , ,
子テーマ化詳細’18

結局「今回も子テーマ化」してしまったので、それならそれでやりたい事はやっちゃいましょうという事で、ま  続きを読む

テーマ翻訳:実践編
blank

テーマ翻訳についての理解を深めるため「実践編」として「Search Form(検索メニュー)」を翻訳  続きを読む

検索エンジンを分離
blank

何度か紹介しているのでご存知の方もいると思うが、ここの環境は、AWS上のEC2最少インスタンス(t2  続きを読む

サイトのお引越し
blank

このサイトは2014年からAWS EC2上の「Amazon Linux」インスタンスで稼働していまし  続きを読む

Elasticsearch
blank

久しぶりにITネタです。Elasticsearchのお話です。それほど頻繁ではないけど時々あるバージ  続きを読む

鬼門に再挑戦?
blank

はい、またテーマ変えました。ガラッと。パソコンとスマホで表示の統一感を持たせるのに一苦労、MacとW  続きを読む

スポンサーリンク

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください