自然言語処理ライブラリのGiNZAを使って係り受け解析を試す

Photo by Florian Olivo on Unsplash
はじめに
自然言語処理ライブラリのGiNZAを使って係り受け解析を行ってみたのでその手順をまとめます。
できるようになること
以下のように、指定した文章の係り受け木を作成して、単語間の修飾関係を可視化してみます。また、条件に合致する文章の検索、名詞節の抽出も行います。
参考文献
この記事を書くにあたって、以下の記事を参考にさせて頂きました。大変勉強になりました。またこちらの執筆者様にコメント頂きこの記事の作成に至りました。ありがとうございます。
私(安岡孝一)の一昨昨日の日記の読者から、GiNZAも紹介してほしい旨の御意見をいただいた。実は4月29日の日記で、さりげなく紹介してるのだけど、とりあえずpip3でGiNZA 1.0.2をインストール。 % pip3 install https://github.com/megagonlabs/ginza/releases/download/v1.0.2/ja_ginza_nopn-1.0.2.tgz ...
前提と環境
以下の通りです。
- OS : Ubuntu18.04
- Python 3.7
- GiNZAはインストール済とする。
2019年4月に株式会社リクルートのAI研究機関であるMegagon Labsから、Python向けの日本語自然言語処理オープンソースライブラリ「GiNZA」(ギンザ)が公開されました(プレスリリースのリンクは以下)。GiNZAには国立国語研究所との共同研究成果の学習済モデルが組み込まれているそうです。この記事では、GiNZAをインストールして簡単に使ってみるまでの手順をまとめます。
条件に合致する文を探す
以下は、夏目漱石の「吾輩は猫である」の冒頭部分が保存されたsouseki.txt
というテキストファイルを読み込み、その中で「目的語+見る」という文を探して見つけた目的語を表示します。
なお、上記で読み込むsouseki.txt
は以下の内容となります。
上記の実行結果は以下です。
名詞節を抽出する
名詞とその名詞に係る単語を与えた文から抽出して表示します。
実行結果は以下のようになります。
簡単な例ですが、名詞とそれに係る単語を抽出できていることが分かります。上記について記載されているspaCyのドキュメントは以下です。
spaCy is a free open-source library for Natural Language Processing in Python. It features NER, POS tagging, dependency parsing, word vectors and more.
係り受け木を表示する
係り受け解析を行って単語間の修飾関係をツリー構造で表示します。
以下のスクリプトを実行すると、与えた文の係り受け木を端末上に表示することができます。以下ではnltk
が必要となるため、pip install nltk
などでインストールしておいてください。
実行結果は以下です。文単位で表示されます。
なお、上記のスクリプトは以下を参考にさせて頂きました。
I have been trying to find how to get the dependency tree with spaCy but I can't find anything on how to get the tree, only on how to navigate the tree.
係り受け木をブラウザからアクセスして確認する
spaCyでは、係り受け木を確認するためにWebサーバーを起動してブラウザからアクセスして確認も可能です。displacy.serve
を使用します。
上記を実行すると、以下のようにWebサーバーが起動して待機状態になります。
あとはブラウザからlocalhost:5000
にアクセスすると、以下のように係り受け木を確認できます。なお、上記スクリプトファイルを実行している端末にlocalhost
でアクセスできることが前提となります。
係り受け木をSVGファイルに保存する
SVG形式のファイルに保存することも可能です。以下を実行すると、与えた文章の各文について係り受け木をSVG形式でファイルに保存します。
上記を実行すると、吾輩は猫である。.svg
、名前はまだ無い。.svg
という2つのファイルがimages
というディレクトリ内に作成されます。なお、このimages
ディレクトリは、上記スクリプトファイルと同じディレクトリ内に作成済であることを前提としていますので、各自の環境に合わせて変更してください。
上記について記載されているspaCyのドキュメントは以下です。
spaCy is a free open-source library for Natural Language Processing in Python. It features NER, POS tagging, dependency parsing, word vectors and more.
まとめ
GiNZAでできることはまだまだ多いので、色々と調べてより実用的な応用例をまた載せれればと思います。
関連記事
- 公開日:2019/11/19 更新日:2019/11/19
AIによって自動生成した人物写真をダウンロードできるギャラリーサイト「25,000 AI Photos」
「25,000 AI」はAIで自動生成した人物のフォトギャラリーサイトです。サイトにアクセスすると分かりますが、色々な地域の方の男女の人物写真が公開されています。これらは全て実在する人物ではなくAIによって自動生成されているようです。
- 公開日:2019/05/30 更新日:2019/05/30
News APIへの登録とPythonでニュースを取得するまでの手順
News APIは、いくつかのニュースサイトからトップニュースや条件指定して合致したニュースをJSON形式で取得できるAPIです。2019年5月時点では30,000ほどのニュースサイト等のソースに対応しています。この記事では、実際にNews APIを使用してニュースを取得するまでの手順をまとめます。
- 公開日:2019/05/29 更新日:2019/05/29
自然言語処理ライブラリGiNZAをインストールして簡単に動かすまでの手順
2019年4月にPython向けの日本語自然言語処理オープンソースライブラリ「GiNZA」(ギンザ)が公開されました(プレスリリースのリンクは以下)。GiNZAには国立国語研究所との共同研究成果の学習済モデルが組み込まれているそうです。この記事では、GiNZAをインストールして簡単に使ってみるまでの手順をまとめます。
- 公開日:2019/05/28 更新日:2019/05/28
テキストの有害度をスコア化できるGoogleのPerspective APIをPythonで使う手順
GoogleのプロジェクトのJigsawの中の1つに、与えられた文字列がどれぐらい有害であるかを色々な指標でスコア化するPerspective APIというプロジェクトがあります。この記事では、このPerspective APIをPythonで実際に動かしてみるところまでの手順をまとめます。
開発アプリ
