nltk を使用して文末を判定する

Python

はじめに

自然言語処理のための Python ライブラリの一つとして、nltk があります。
本記事では nltk を使用して、英文の構文解析を行い、文末の判定を行う方法についてまとめます。

対象者

この記事は下記のような人を対象にしています。

  • 英語の構文解析を行いたい人

環境

今回、nltk 3.7 を使用します。本バージョンは、Python のバージョン 3.7 以降で使用できます。

$ python -V
Python 3.7.10
$ pip list | grep nltk
nltk   3.7

手順

nltk のインストール

$ pip install nltk

構文解析を行う

構文解析を行うサンプルコードです。
構文解析する文章は下記サイトより引用しました。
https://www.bbc.com/news/technology-61718101

import nltk

nltk.download('punkt')
sentence = '''
Apple Pay Later will allow users in the US to spread the cost of a purchase into four payments over six weeks, without paying interest or fees.
It forms part of a range of new iPhone features, including the ability to edit iMessages and a feature intended to help people in abusive relationships.
'''
words = nltk.word_tokenize(sentence)
# words
# ['Apple', 'Pay', 'Later', 'will', 'allow', 'users', 'in', 'the', 'US', 'to', 'spread', 'the', 'cost', 'of', 'a', 'purchase', 'into', 'four', 'payments', 'over', 'six', 'weeks', ',', 'without', 'paying', 'interest', 'or', 'fees', '.', 'It', 'forms', 'part', 'of', 'a', 'range', 'of', 'new', 'iPhone', 'features', ',', 'including', 'the', 'ability', 'to', 'edit', 'iMessages', 'and', 'a', 'feature', 'intended', 'to', 'help', 'people', 'in', 'abusive', 'relationships', '.']

words_parsed = nltk.pos_tag(words)
# words_parsed
# [('Apple', 'NNP'), ('Pay', 'NNP'), ('Later', 'NNP'), ('will', 'MD'), ('allow', 'VB'), ('users', 'NNS'), ('in', 'IN'), ('the', 'DT'), ('US', 'NNP'), ('to', 'TO'), ('spread', 'VB'), ('the', 'DT'), ('cost', 'NN'), ('of', 'IN'), ('a', 'DT'), ('purchase', 'NN'), ('into', 'IN'), ('four', 'CD'), ('payments', 'NNS'), ('over', 'IN'), ('six', 'CD'), ('weeks', 'NNS'), (',', ','), ('without', 'IN'), ('paying', 'VBG'), ('interest', 'NN'), ('or', 'CC'), ('fees', 'NNS'), ('.', '.'), ('It', 'PRP'), ('forms', 'VBZ'), ('part', 'NN'), ('of', 'IN'), ('a', 'DT'), ('range', 'NN'), ('of', 'IN'), ('new', 'JJ'), ('iPhone', 'NN'), ('features', 'NNS'), (',', ','), ('including', 'VBG'), ('the', 'DT'), ('ability', 'NN'), ('to', 'TO'), ('edit', 'VB'), ('iMessages', 'NNS'), ('and', 'CC'), ('a', 'DT'), ('feature', 'NN'), ('intended', 'VBN'), ('to', 'TO'), ('help', 'VB'), ('people', 'NNS'), ('in', 'IN'), ('abusive', 'JJ'), ('relationships', 'NNS'), ('.', '.')]

なお、機能をダウンロードすると、$HOME配下にnltk_dataという名前でフォルダが作成され、ファイルが格納されます。

文末の”.”と固有名詞の中に含まれる”.”も区別することができます。
構文解析する文章は下記サイトより引用しました。
https://en.wikipedia.org/wiki/Washington,_D.C.

文中の”D.C.”に含まれる”.”を固有名詞(NNP)として認識していることがわかります。

sentence = '''
Washington, D.C., formally the District of Columbia, also known as just Washington or simply D.C., is the capital city and only federal district of the United States.
'''

words = nltk.word_tokenize(sentence)
words_parsed = nltk.pos_tag(words)
# words_parsed
# [('Washington', 'NNP'), (',', ','), ('D.C.', 'NNP'), (',', ','), ('formally', 'RB'), ('the', 'DT'), ('District', 'NNP'), ('of', 'IN'), ('Columbia', 'NNP'), (',', ','), ('also', 'RB'), ('known', 'VBN'), ('as', 'IN'), ('just', 'RB'), ('Washington', 'NNP'), ('or', 'CC'), ('simply', 'RB'), ('D.C.', 'NNP'), (',', ','), ('is', 'VBZ'), ('the', 'DT'), ('capital', 'NN'), ('city', 'NN'), ('and', 'CC'), ('only', 'RB'), ('federal', 'JJ'), ('district', 'NN'), ('of', 'IN'), ('the', 'DT'), ('United', 'NNP'), ('States', 'NNPS'), ('.', '.')]

おわりに

本記事では nltk を使用して、英文の構文解析を行い、文末の判定を行う方法についてまとめました。この記事がどなたかの参考になれば幸いです。

参考

コメント