🔥

GiNZA入門2(基本操作編1)(基本的な使い方マスターを目指す方向け)

2023/01/14に公開

こんにちにゃんです❕
GiNZA入門に関する記事2本目です。
この記事ではGiNZAの基本的な操作方法について書いていきます。
まず主にGiNZAで出来ることは次の通りです。
image.png
一つ一つ説明していきます。

まずGiNZAを用いるために、spaCyをインポートします。
そうしたらそのあとGiNZAのロードを行い、nlpという変数に渡します。
GiNZAではdocクラスというものがあります。
docクラスはこの後説明する解析の結果を保持するクラスで、doc=nlp(文章(str型))で解析が完了します。
簡単に言うと文章とそれに関する情報をまとめて持っているというイメージです(どこからどこまでが一つの単語かなど)

sent_div.py
import spacy

nlp=spacy.load('ja_ginza') #GiNZAのロード

#GiNZAの使い方を説明します。
#GiNZAは1⃣文境界解析、2⃣形態素解析、3⃣係り受け解析、4⃣固有表現抽出、5⃣類似度計算が出来ます。
#docクラスは解析結果を保持するクラスで、doc=nlp(文章)で解析が完了します。(nlpはtextからdocクラスを生成するコマンドです)

GiNZAのロードができたら、ついに解析に移ります。
GiNZAでできること一つ目は文境界解析です。文境界解析は文章を文ごとに分割するプロセスです。
句点(。)で分解するということです。

sent_div.py
#①文境界解析
doc=nlp('こんにちは。今日は天気がいいですね。今日はどこに行きますか。')
for sent in doc.sents: #文章群の中から文章を一つずつ抽出
    print(sent) #文を表示 

image.png

このような感じに分割してくれます。
GiNZAで出来ること2つ目は形態素解析です。
そもそも形態素って何って感じの方が多いと思います。
形態素は「名詞」、「助詞」、「形容詞」など、文の最小の単位のことを言います。
例えば「すいかを食べる。」は「すいか」、「を」、「食べる」に分解できますが、これ以上分解はできない(すると意味が分からなくなる)ので3つの形態素からできていることがわかります。
形態素解析はこんな感じで文をGiNZAが分解してくれます。

mono.py
#②形態素解析
doc=nlp('今日は天気が良くない。')
for sent in doc.sents: #文章群の中から文章を一つずつ抽出
    for token in sent: #文章の中から形態素を一つずつ抽出
        print(
            str(token.i)+', '+ #形態素の番号
            token.text+', '+ #分解した形態素
            token.lemma_+', '+ #語彙素(原形みたいなもの)
            token.pos_+', '+ #品詞
            token.tag_ #品詞詳細
        )

image.png

コードと実行結果を見るとイメージがつきやすいと思います。
GiNZAで出来ること3つ目は係り受け解析です。
係り受け解析は形態素と形態素の関係を調べることを言います。
例えば「赤いリンゴ」は「赤い」が「リンゴ」を修飾しています。
このように形態素同士の関係を調べることができます。

syusyoku.py
#③係り受け解析
doc=nlp('今日は天気がいいですね。')
for sent in doc.sents: #文章群の中から文章を一つずつ抽出
    for token in sent: #文章の中から形態素を一つずつ抽出
        print(token.text+' ← '+  #形態素
        token.head.text+', '+  #形態素を修飾している語
        token.dep_)  #修飾・従属関係

image.png

今回はここまでにしようと思います。
次回は固有表現抽出と類似度計算について書くつもりです。
では、ばいにゃん~

参考にさせていただいた記事
https://qiita.com/poyo46/items/7a4965455a8a2b2d2971

Discussion