アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【PythonUbuntu
Ubuntu + Python3.10で形態素解析GiNZAを使う
POSTED BY
2023-04-28

当方環境Ubuntu Server 22.04 LTSで自然言語処理エンジンGiNZAを動かしたメモ。

システムにはすでに/usr/bin/python3があるので、pipを入れる。

which python3
/usr/bin/python3
which pip

wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

export PATH="$PATH:$HOME/.local/bin"
which pip
/home/snote/.local/bin/pip

python3 -V
Python 3.10.6
pip -V
pip 23.1.2 from /home/snote/.local/lib/python3.10/site-packages/pip (python 3.10)

こちらの公式ページを参考に、セットアップ、テストを行う。

https://megagonlabs.github.io/ginza/

モジュールのインストール

pip install -U ginza ja_ginza

単独コマンドのテスト

echo "私は明日東京タワーから羽田に行き、飛行機で旭川へ行く予定です。" | ginza

# text = 私は明日東京タワーから羽田に行き、飛行機で旭川へ行く予定です。
1       私      私      PRON    代名詞  _       9       nsubj   _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=ワタクシ
2       は      は      ADP     助詞-係助詞     _       1       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=ハ
3       明日    明日    ADV     名詞-普通名詞-副詞可能  _       9       obl     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|Reading=アス
4       東京    東京    PROPN   名詞-固有名詞-地名-一般 _       5       compound        _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=CONT|NP_B|Reading= トウキョウ|NE=B-FAC|ENE=B-School
5       タワー  タワー  NOUN    名詞-普通名詞-一般      _       9       obl     _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SEM_HEAD|NP_I|Reading=タワ ー|NE=I-FAC|ENE=I-School
6       から    から    ADP     助詞-格助詞     _       5       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=カラ
7       羽田    羽田    PROPN   名詞-固有名詞-人名-姓   _       9       obl     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=ハタ|NE=B-GPE|ENE=B-Location_Other
8       に      に      ADP     助詞-格助詞     _       7       case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=ニ
9       行き    行く    VERB    動詞-非自立可能 _       15      advcl   _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|Inf=五段-カ行,連用形-一般|Reading=イキ
10      、      、      PUNCT   補助記号-読点   _       9       punct   _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=CONT|Reading=、
11      飛行機  飛行機  NOUN    名詞-普通名詞-一般      _       15      obl     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=ヒコ ウキ
12      で      で      ADP     助詞-格助詞     _       11      case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=デ
13      旭川    旭川    PROPN   名詞-固有名詞-地名-一般 _       15      obl     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=アサ ヒカワ|NE=B-GPE|ENE=B-City
14      へ      へ      ADP     助詞-格助詞     _       13      case    _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=ヘ
15      行く    行く    VERB    動詞-非自立可能 _       16      acl     _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|Inf=五段-カ行,連体形-一般|Reading=イク
16      予定    予定    NOUN    名詞-普通名詞-サ変可能  _       0       root    _       SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=ROOT|NP_B|Reading=ヨテイ
17      です    です    AUX     助動詞  _       16      cop     _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf=助動詞-デス,終止形-一般|Reading=デス
18      。      。      PUNCT   補助記号-句点   _       16      punct   _       SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=CONT|Reading=。

Pythonスクリプトからの呼び出し

test_ginza.py

import spacy
nlp = spacy.load('ja_ginza')
doc = nlp('私は明日東京タワーから羽田に行き、飛行機で旭川へ行く予定です。')
for sent in doc.sents:
    for token in sent:
        print(
            token.i,
            token.orth_,
            token.lemma_,
            token.norm_,
            token.morph.get("Reading"),
            token.pos_,
            token.morph.get("Inflection"),
            token.tag_,
            token.dep_,
            token.head.i,
        )
    print('EOS')

今回は「2. GiNZA + 従来型モデル」を入れているので、ja_ginza_electraをja_ginzaに修正。

python3 test_ginza.py

0 私 私 私 ['ワタクシ'] PRON [] 代名詞 nsubj 8
1 は は は ['ハ'] ADP [] 助詞-係助詞 case 0
2 明日 明日 明日 ['アス'] ADV [] 名詞-普通名詞-副詞可能 obl 8
3 東京 東京 東京 ['トウキョウ'] PROPN [] 名詞-固有名詞-地名-一般 compound 4
4 タワー タワー タワー ['タワー'] NOUN [] 名詞-普通名詞-一般 obl 8
5 から から から ['カラ'] ADP [] 助詞-格助詞 case 4
6 羽田 羽田 羽田 ['ハタ'] PROPN [] 名詞-固有名詞-人名-姓 obl 8
7 に に に ['ニ'] ADP [] 助詞-格助詞 case 6
8 行き 行く 行く ['イキ'] VERB ['五段-カ行;連用形-一般'] 動詞-非自立可能 advcl 14
9 、 、 、 ['、'] PUNCT [] 補助記号-読点 punct 8
10 飛行機 飛行機 飛行機 ['ヒコウキ'] NOUN [] 名詞-普通名詞-一般 obl 14
11 で で で ['デ'] ADP [] 助詞-格助詞 case 10
12 旭川 旭川 旭川 ['アサヒカワ'] PROPN [] 名詞-固有名詞-地名-一般 obl 14
13 へ へ へ ['ヘ'] ADP [] 助詞-格助詞 case 12
14 行く 行く 行く ['イク'] VERB ['五段-カ行;連体形-一般'] 動詞-非自立可能 acl 15
15 予定 予定 予定 ['ヨテイ'] NOUN [] 名詞-普通名詞-サ変可能 ROOT 15
16 です です です ['デス'] AUX ['助動詞-デス;終止形-一般'] 助動詞 cop 15
17 。 。 。 ['。'] PUNCT [] 補助記号-句点 punct 15
EOS

仕方ないんだけど、「東京」と「タワー」が分かれてしまっているのが残念。スポットデータベースを参照するようなことができれば良いのですが…。

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】