Stanza

自然言語処理の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 
  • word.head
    • 依存関係の(親ノードの)単語のインデックス
      • 0はルートノード
  • word.deprel
    • 依存関係を表すラベル
  • word.pos
    • 品詞の情報
  • word.xpos
    • 詳細な品詞の情報

doc.sentencesは文書内の各文に対応するStanzaのSentenceオブジェクトのリストです。

各Sentenceオブジェクトには、文の解析結果が含まれています。

pos(品詞の情報)

日本語にすると以下のような意味になります。

1ADJadjective形容詞
2ADPadposition接置詞
3ADVadverb副詞
4AUXauxiliary助動詞
5CCONJcoordinating conjunction等位接続詞
6DETdeterminer限定詞
7INTJinterjection間投詞
8NOUNnoun名詞
9NUMnumeral数詞
10PARTparticle不変化詞
11PRONpronoun代名詞
12PROPNproper noun固有名詞
13PUNCTpunctuation句読点
14SCONJsubordinating conjunction従位接続詞
15SYMsymbol記号
16VERBverb動詞
17Xotherその他
タイトルとURLをコピーしました