このチャプターの目次
kagome を形態素解析コマンドとして利用する方法について説明します。コマンドは go get
もしくは brew
によるインストールが出来ます。
インストール
Go を用いてインストールする
go install github.com/ikawaha/kagome/v2@latest
もしくは Go 1.6 より前ならば
env GO111MODULE=on go get -u github.com/ikawaha/kagome/v2
brew tap でインストールする
brew install ikawaha/kagome/kagome
コマンドオプション
$ kagome --help
Japanese Morphological Analyzer -- github.com/ikawaha/kagome/v2
usage: kagome <command>
The commands are:
[tokenize] - command line tokenize (*default)
server - run tokenize server
lattice - lattice viewer
sentence - tiny sentence splitter
version - show version
tokenize [-file input_file] [-dict dic_file] [-userdict userdic_file] [-sysdict (ipa|uni)] [-simple false] [-mode (normal|search|extended)] [-split] [-json]
-dict string
dict
-file string
input file
-json
outputs in JSON format
-mode string
tokenize mode (normal|search|extended) (default "normal")
-simple
display abbreviated dictionary contents
-split
use tiny sentence splitter
-sysdict string
system dict type (ipa|uni) (default "ipa")
-udict string
user dict
形態素解析をおこなう
対話的に使う
$ kagome
すもももももももものうち
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
ファイルから読み込んで解析する
$ cat 赤い蝋燭と人魚.txt
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: 赤い蝋燭と人魚.txt
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ 人魚は、南の方の海にばかり棲んでいるのではありません。北の海にも棲んでいたのであります。
2 │ 北方の海の色は、青うございました。ある時、岩の上に、女の人魚があがって、あたりの景色を眺めながら休んでいま
│ した。
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────
$ kagome -file 赤い蝋燭と人魚.txt
人魚 名詞,一般,*,*,*,*,人魚,ニンギョ,ニンギョ
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
、 記号,読点,*,*,*,*,、,、,、
南 名詞,一般,*,*,*,*,南,ミナミ,ミナミ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
方 名詞,非自立,一般,*,*,*,方,ホウ,ホー
の 助詞,連体化,*,*,*,*,の,ノ,ノ
海 名詞,一般,*,*,*,*,海,ウミ,ウミ
... snip
標準入力から読み込む
$ echo すもももももももものうち|kagome
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
出力を JSON 形式にする
-json
オプションを指定すると、詳細な形態素情報を JSON 形式で得られます。JSON の形式はサーバとしてコマンドを起動したときのレスポンスと同様です。
% echo "猫" | kagome -json | jq .
[
{
"id": 286994,
"start": 0,
"end": 1,
"surface": "猫",
"class": "KNOWN",
"pos": [
"名詞",
"一般",
"*",
"*"
],
"base_form": "猫",
"reading": "ネコ",
"pronunciation": "ネコ",
"features": [
"名詞",
"一般",
"*",
"*",
"*",
"*",
"猫",
"ネコ",
"ネコ"
]
}
]
jq
コマンドを組み合わせれば、ヨミだけを得ることも出来るでしょう。
echo 中部国際空港| kagome -json | jq -r '.[].pronunciation'
チューブ
コクサイ
クーコー
辞書を指定する
デフォルトは IPADic ですが、UniDIC も利用可能です。
$ echo 自転車|kagome -sysdict uni
自転 名詞,普通名詞,サ変可能,*,*,*,ジテン,自転,自転,ジテン,自転,ジテン,漢,*,*,*,*
車 接尾辞,名詞的,一般,*,*,*,シャ,車,車,シャ,車,シャ,漢,*,*,*,*
解析モードを指定する
解析モードには、normal
、search
、extended
があります。search
は kuromoji の検索モードを模倣した動作をします。また extended
は、検索モードで未知語があった場合に unigram に区切るような動作をします。
$ echo 関西国際空港|kagome
関西国際空港 名詞,固有名詞,組織,*,*,*,関西国際空港,カンサイコクサイクウコウ,カンサイコクサイクーコー
EOS
$ echo 関西国際空港|kagome -mode search
関西 名詞,固有名詞,地域,一般,*,*,関西,カンサイ,カンサイ
国際 名詞,一般,*,*,*,*,国際,コクサイ,コクサイ
空港 名詞,一般,*,*,*,*,空港,クウコウ,クーコー
EOS
品詞以外の情報を抑制する
$ echo ねこですねこはいます|kagome -simple
ねこ 名詞,一般,*,*
です 助動詞,*,*,*
ねこ 名詞,一般,*,*
は 助詞,係助詞,*,*
い 動詞,自立,*,*
ます 助動詞,*,*,*
EOS
ユーザー辞書を指定する
ユーザー辞書を指定可能です。
$ cat userdict.txt
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────
│ File: userdict.txt
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────
1 │ ##
2 │ ## This file should use UTF-8 encoding
3 │ ##
4 │ ## User dictionary format:
5 │ ## <text>,<token1> <token2> ... <tokenn>,<reading1> <reading2> ... <readingn>,<part-of-speech>
6 │ ##
7 │
8 │ # Custom segmentation for long entries
9 │ 日本経済新聞,日本 経済 新聞,ニホン ケイザイ シンブン,カスタム名詞
10 │ 関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,テスト名詞
11 │
12 │ # Custom reading for former sumo wrestler Asashoryu
13 │ 朝青龍,朝青龍,アサショウリュウ,カスタム人名
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────
$ echo 日本経済新聞|kagome -udict userdict.txt
日本経済新聞 カスタム名詞,日本/経済/新聞,ニホン/ケイザイ/シンブン
EOS
ビルドした辞書を指定する
辞書は組み込みですが、(自分で作成した)外部辞書を指定することも可能です。たぶん使う人はいないでしょう。
$ echo 三輪車|kagome -dict ipa.dict
三輪車 名詞,一般,*,*,*,*,三輪車,サンリンシャ,サンリンシャ
EOS
サーバモードを利用する
Web UI で利用する
kagome コマンドには server オプションがあり、Web からアクセスして利用することが可能です。
$ kagome server --help
Usage of server:
-dict string
system dict type (ipa|uni) (default "ipa")
-http string
HTTP service address (default ":6060")
-userdict string
user dict
API で利用する
次のようなデータを /tokenize
エンドポイントに与えると形態素解析された結果が返ってきます。
{"sentence": "解析対象"}
例:
$ kagome server --http :8080&
$ curl localhost:8080/tokenize -d '{"sentence":"三輪車"}'|jq .
{
"status": true,
"tokens": [
{
"id": 106593,
"start": 0,
"end": 3,
"surface": "三輪車",
"class": "KNOWN",
"pos": [
"名詞",
"一般",
"*",
"*"
],
"base_form": "三輪車",
"reading": "サンリンシャ",
"pronunciation": "サンリンシャ",
"features": [
"名詞",
"一般",
"*",
"*",
"*",
"*",
"三輪車",
"サンリンシャ",
"サンリンシャ"
]
}
]
}
解析過程を表示する
lattice
モードでは、解析過程のラティスを Graphviz の dot 形式で表示することが可能です。
色のついたパスが選択されたパスです。
$ kagome lattice 私は鰻|dot -Tpng > lattice.png
文区切りだけをおこなう
sentense
サブコマンドがあります。
$ kagome sentence --help
Usage of sentence:
-file string
input file
$ cat ./testdata/bocchan.txt | kagome sentence |head -10|tail -4
新築の二階から首を出していたら、同級生の一人が冗談《じょうだん》に、いくら威張《いば》っても、そこから飛び降りる事は出来まい。
弱虫やーい。
と囃《はや》したからである。
小使《こづかい》に負ぶさって帰って来た時、おやじが大きな眼《め》をして二階ぐらいから飛び降りて腰を抜かす奴《やつ》があるかと云《い》ったから、この次は抜かさずに飛んで見せますと答えた。