LoginSignup
1
1

More than 3 years have passed since last update.

言語処理100本ノック-54:品詞タグ付け

Posted at

言語処理100本ノック 2015「第6章: 英語テキストの処理」54本目「品詞タグ付け」記録です。
XML解析方法とレンマ、品詞について学びます。

参考リンク

リンク 備考
054.品詞タグ付け.ipynb 回答プログラムのGitHubリンク
素人の言語処理100本ノック:54 多くのソース部分のコピペ元
Stanford Core NLP公式 最初に見ておくStanford Core NLPのページ

環境

種類 バージョン 内容
OS Ubuntu18.04.01 LTS 仮想で動かしています
pyenv 1.2.16 複数Python環境を使うことがあるのでpyenv使っています
Python 3.8.1 pyenv上でpython3.8.1を使っています
パッケージはvenvを使って管理しています
Stanford CoreNLP 3.9.2 インストールしたのが1年前で詳しく覚えていないです・・・
1年たってもそれが最新だったのでそのまま使いました
openJDK 1.8.0_242 他目的でインストールしていたJDKをそのまま使いました

第6章: 英語テキストの処理

学習内容

Stanford Core NLPを用いた英語のテキスト処理を通じて,自然言語処理の様々な基盤技術を概観します.

Stanford Core NLP, ステミング, 品詞タグ付け, 固有表現抽出, 共参照解析, 係り受け解析, 句構造解析, S式

ノック内容

英語のテキスト(nlp.txt)に対して,以下の処理を実行せよ.

54. 品詞タグ付け

Stanford Core NLPの解析結果XMLを読み込み,単語,レンマ,品詞をタブ区切り形式で出力せよ.

課題補足(「レンマ」について)

Wikipedia 語彙素によると「レンマ」は以下のように解説されています。children にとっての childであったりgoes にとっての go が「レンマ」ですね。

語彙素(ごいそ:Lexeme)とは、言語学における形態論的単位であり、異なる形態であるが同じ語であると考えられるものからなる語の集合をいう。例えば英語のchild - children、go - goes - went - gone - going、あるいはbig - bigger - biggestは、それぞれ同じ語彙素としてまとめられる。
形態素はレンマ(Lemma、基本形:上の例でいえばそれぞれchild、go、big)で代表され、ある言語における語彙素の総体がレクシコン(Lexicon、語彙目録)である。レクシコンとレンマは一般的概念であるが、具体的なものとしては辞書と見出し語とに相当する。

回答

回答プログラム 054.品詞タグ付け.ipynb

import xml.etree.ElementTree as ET

for i, token in enumerate(ET.parse('./nlp.txt.xml').iter('token')):
    print('{}\t{}\t{}\t{}'.format(i, token.findtext('word'), 
                                  token.findtext('lemma'), token.findtext('POS')))

    # 多いので制限
    if i > 30:
        break

回答解説

XMLファイルのパス

以下のXMLファイルのパスと目的とする単語,レンマ,品詞のマッピングです。

出力 第1階層 第2階層 第3階層 第4階層 第5階層 第6階層 第7階層
単語 root document sentences sentence tokens token word
レンマ root document sentences sentence tokens token lemma
品詞 root document sentences sentence tokens token POS

XMLファイルはGitHubに置いています。

nlp.txt.xml(抜粋)
<root>
  <document>
    <docId>nlp.txt</docId>
    <sentences>
      <sentence id="1">
        <tokens>
          <token id="1">
            <word>Natural</word>
            <lemma>natural</lemma>
            <CharacterOffsetBegin>0</CharacterOffsetBegin>
            <CharacterOffsetEnd>7</CharacterOffsetEnd>
            <POS>JJ</POS>
            <NER>O</NER>
            <Speaker>PER0</Speaker>
          </token>
          <token id="2">
            <word>language</word>
            <lemma>language</lemma>
            <CharacterOffsetBegin>8</CharacterOffsetBegin>
            <CharacterOffsetEnd>16</CharacterOffsetEnd>
            <POS>NN</POS>
            <NER>O</NER>
            <Speaker>PER0</Speaker>
          </token>
          <token id="3">
            <word>processing</word>
            <lemma>processing</lemma>
            <CharacterOffsetBegin>17</CharacterOffsetBegin>
            <CharacterOffsetEnd>27</CharacterOffsetEnd>
            <POS>NN</POS>
            <NER>O</NER>
            <Speaker>PER0</Speaker>
          </token>

出力結果(実行結果)

プログラム実行すると以下の結果が出力されます。
ちなみにこの品詞は何を示しているのか初見でわかりません。記事「Stanford CoreNLP POSタグ まとめ」が素晴らしくまとめてくれていました!

出力結果
0   Natural natural JJ
1   language    language    NN
2   processing  processing  NN
3   From    from    IN
4   Wikipedia   Wikipedia   NNP
5   ,   ,   ,
6   the the DT
7   free    free    JJ
8   encyclopedia    encyclopedia    NN
9   Natural natural JJ
10  language    language    NN
11  processing  processing  NN
12  -LRB-   -lrb-   -LRB-
13  NLP nlp NN
14  -RRB-   -rrb-   -RRB-
15  is  be  VBZ
16  a   a   DT
17  field   field   NN
18  of  of  IN
19  computer    computer    NN
20  science science NN
21  ,   ,   ,
22  artificial  artificial  JJ
23  intelligence    intelligence    NN
24  ,   ,   ,
25  and and CC
26  linguistics linguistics NNS
27  concerned   concern VBN
28  with    with    IN
29  the the DT
30  interactions    interaction NNS
31  between between IN
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1