見出し画像

JUMAN++で形態素解析を行いましょう

初めまして FeedForce新卒1年目のデータ分析チームの八百です。新卒でデータ分析で何ができるんだと思われる方がおられると思います。頑張って成長中です。

今回は形態素解析システムのJUMAN++をpythonで動かせるようにしていきたいと思います。

JUMAN++って?

JUMAN++は言語モデルを利用した高性能な形態素解析システムです.言語モデルとして Recurrent Neural Network Language Model(RNNLM) を用いることにより,単語の並びの意味的な自然さを考慮した解析を行います.それにより JUMAN,MeCab に比べ大きく性能が向上しています.文法・辞書・出力フォーマット等は JUMAN から引き継いだものを利用しています.本システムは CREST「知識に基づく構造的言語処理の確立と知識インフラの構築」の支援により開発されました.
そうです

環境

・mac OS 10.15.4
・python 3.7.6

JUMAN++のインストール

今回は、最終的にpyknpを用いて解析しますが、とりあえずJUMAN++を入れていきます。まずは、ダウンロードから


wget http://lotus.kuee.kyoto-u.ac.jp/nl-resource/jumanpp/jumanpp-1.02.tar.xz

するとまさかの

bash: wget: command not found

wgetって最初から入ってるものだと思っていました笑
気を取り直して、brewでwgetを入れました

brew install wget
tar xJvf jumanpp-1.02.tar.xz
cd jumanpp-1.02

解凍できたら、次は構成の設定をしましょう

./configure

するとこんなエラーが出てきました。

configure: error: "Error: cannot find available Boost library."

Boostがないって言われているのでBoostを入れましょう

brew install boost

これで再び、設定を行いインストールします

make
sudo make install

正しくインストールされていれば、以下のコマンドでバージョン確認が行えます

>jumanpp -v
JUMAN++ 1.02

pyknpのインストール

pipで簡単にインストールできます

pip install pyknp

構文解析

from pyknp import Juman
jumanpp = Juman()
result = jumanpp.analysis("すもももももももものうち")
for mrph in result.mrph_list(): # 各形態素にアクセス
   print("見出し:%s, 読み:%s, 原形:%s, 品詞:%s, 品詞細分類:%s, 活用型:%s, 活用形:%s, 意味情報:%s, 代表表記:%s" \
           % (mrph.midasi, mrph.yomi, mrph.genkei, mrph.hinsi, mrph.bunrui, mrph.katuyou1, mrph.katuyou2, mrph.imis, mrph.repname))
見出し:すもも, 読み:すもも, 原形:すもも, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:酸桃/すもも 自動獲得:EN_Wiktionary, 代表表記:酸桃/すもも
見出し:も, 読み:も, 原形:も, 品詞:助詞, 品詞細分類:副助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
見出し:もも, 読み:もも, 原形:もも, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:股/もも カテゴリ:動物-部位, 代表表記:股/もも
見出し:も, 読み:も, 原形:も, 品詞:助詞, 品詞細分類:副助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
見出し:もも, 読み:もも, 原形:もも, 品詞:名詞, 品詞細分類:普通名詞, 活用型:*, 活用形:*, 意味情報:代表表記:股/もも カテゴリ:動物-部位, 代表表記:股/もも
見出し:の, 読み:の, 原形:の, 品詞:助詞, 品詞細分類:接続助詞, 活用型:*, 活用形:*, 意味情報:NIL, 代表表記:
見出し:うち, 読み:うち, 原形:うち, 品詞:名詞, 品詞細分類:副詞的名詞, 活用型:*, 活用形:*, 意味情報:代表表記:うち/うち, 代表表記:うち/うち

分かち書きの取得は以下のようにやれば取得できます

[mrph.midasi for mrph in result.mrph_list()]
['すもも', 'も', 'もも', 'も', 'もも', 'の', 'うち']


noteにこういうのって需要あるんですかね。とりあえずこんな感じで終わり。

この記事が参加している募集

スキしてみて

この記事が気に入ったらサポートをしてみませんか?