言語処理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に置いています。
<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