自然言語処理のPythonパッケージ「Stanza」の解説です。
Stanzaとは?
Stanzaは、自然言語処理タスクに使用できるPythonパッケージであり、文書の分割、品詞タグ付け、固有表現抽出、依存構造解析、機械翻訳などの機能を提供します。
Stanzaは、スタンフォード大学のCoreNLPプロジェクトに基づいて開発されましたが、より高速でメモリ効率が高く、多言語対応が可能です。
導入方法(インストール)
Stanzaをインストールするには、pipを使用します。ターミナルまたはコマンドプロンプトで以下のコマンドを実行します。
pip install stanza
また、Stanzaを使用するには、事前に言語モデルをダウンロードする必要があります。
Stanzaは多言語対応しており、言語モデルは自動的にダウンロードされます。
ただし、明示的に言語モデルをダウンロードするには、以下のようにします。
import stanza
stanza.download('en') # 英語モデルのダウンロード
使い方(サンプルコード)
以下は、英語文書の品詞タグ付けと依存構造解析を行う例です。
import stanza
# 0:English,1:Japanese
SELECT_LANG = 1
def stanza_english():
# 英語モデルのダウンロード
stanza.download('en')
nlp = stanza.Pipeline('en')# パイプラインの作成
# 品詞タグ付けと依存構造解析の実行
doc = nlp("The quick brown fox jumps over the lazy dog.")
for sentence in doc.sentences:
for word in sentence.words:
print(f"{word.text}\t{word.lemma}\t{word.head}\t{sentence.words[word.head-1].text}\t{word.deprel}\t{word.pos}\t{word.xpos}")
def stanza_japanese():
#日本語モデル
stanza.download('ja')
nlp = stanza.Pipeline('ja') # パイプラインの作成
# 品詞タグ付けと依存構造解析の実行
doc = nlp('坊主が屏風に上手に坊主の絵を描いた。')
for sentence in doc.sentences:
for word in sentence.words:
print(f"{word.text}\t{word.lemma}\t{word.head}\t{sentence.words[word.head-1].text}\t{word.deprel}\t{word.pos}\t{word.xpos}")
if SELECT_LANG == 0:
stanza_english()
elif SELECT_LANG == 1:
stanza_japanese()
英語モデルの出力
The the 4 fox det DET DT
quick quick 4 fox amod ADJ JJ
brown brown 4 fox amod ADJ JJ
fox fox 5 jumps nsubj NOUN NN
jumps jump 0 . root VERB VBZ
over over 9 dog case ADP IN
the the 9 dog det DET DT
lazy lazy 9 dog amod ADJ JJ
dog dog 5 jumps obl NOUN NN
. . 5 jumps punct PUNCT .
日本語モデルの出力
坊主 坊主 11 描い nsubj NOUN 名詞-普通名詞-一般
が が 1 坊主 case ADP 助詞-格助詞
屏風 屏風 11 描い obl NOUN 名詞-普通名詞-一般
に に 3 屏風 case ADP 助詞-格助詞
上手 上手 11 描い advcl ADJ 形状詞-一般
に だ 5 上手 aux AUX 助動詞-助動詞-ダ
坊主 坊主 9 絵 nmod NOUN 名詞-普通名詞-一般
の の 7 坊主 case ADP 助詞-格助詞
絵 絵 11 描い obj NOUN 名詞-普通名詞-一般
を を 9 絵 case ADP 助詞-格助詞
描い 描く 0 。 root VERB 動詞-一般-五段-カ行
た た 11 描い aux AUX 助動詞-助動詞-タ
。 。 11 描い punct PUNCT 補助記号-句点
この例では、文書を処理して、各単語の以下のような情報を出力しています。
- word.text
- 単語のテキスト
- word.lemma
- 補題
- 例:take は takes, took, taken, taking に変化
- これらのlemmaは take
- 例:take は takes, took, taken, taking に変化
- 補題
- word.head
- 依存関係の(親ノードの)単語のインデックス
- 0はルートノード
- 依存関係の(親ノードの)単語のインデックス
- word.deprel
- 依存関係を表すラベル
- word.pos
- 品詞の情報
- word.xpos
- 詳細な品詞の情報
doc.sentencesは文書内の各文に対応するStanzaのSentenceオブジェクトのリストです。
各Sentenceオブジェクトには、文の解析結果が含まれています。
pos(品詞の情報)
日本語にすると以下のような意味になります。
1 | ADJ | adjective | 形容詞 |
2 | ADP | adposition | 接置詞 |
3 | ADV | adverb | 副詞 |
4 | AUX | auxiliary | 助動詞 |
5 | CCONJ | coordinating conjunction | 等位接続詞 |
6 | DET | determiner | 限定詞 |
7 | INTJ | interjection | 間投詞 |
8 | NOUN | noun | 名詞 |
9 | NUM | numeral | 数詞 |
10 | PART | particle | 不変化詞 |
11 | PRON | pronoun | 代名詞 |
12 | PROPN | proper noun | 固有名詞 |
13 | PUNCT | punctuation | 句読点 |
14 | SCONJ | subordinating conjunction | 従位接続詞 |
15 | SYM | symbol | 記号 |
16 | VERB | verb | 動詞 |
17 | X | other | その他 |