言語処理100本ノック 2015「第6章: 英語テキストの処理」の51本目「単語の切り出し」記録です。
今回は技術的には前回とほとんど変わりません。10行に満たないコードで終わる簡単なノックです。
参考リンク
リンク | 備考 |
---|---|
051.単語の切り出し.ipynb | 回答プログラムのGitHubリンク |
素人の言語処理100本ノック:51 | 多くのソース部分のコピペ元 |
環境
種類 | バージョン | 内容 |
---|---|---|
OS | Ubuntu18.04.01 LTS | 仮想で動かしています |
pyenv | 1.2.16 | 複数Python環境を使うことがあるのでpyenv使っています |
Python | 3.8.1 | pyenv上でpython3.8.1を使っています パッケージはvenvを使って管理しています |
第6章: 英語テキストの処理
学習内容
Stanford Core NLPを用いた英語のテキスト処理を通じて,自然言語処理の様々な基盤技術を概観します.
Stanford Core NLP, ステミング, 品詞タグ付け, 固有表現抽出, 共参照解析, 係り受け解析, 句構造解析, S式
ノック内容
英語のテキスト(nlp.txt)に対して,以下の処理を実行せよ.
51. 単語の切り出し
空白を単語の区切りとみなし,50の出力を入力として受け取り,1行1単語の形式で出力せよ.ただし,文の終端では空行を出力せよ.
回答
回答プログラム 051.単語の切り出し.ipynb
import re
with open('./050.result.txt') as file_in, \
open('./051.result.txt', 'w') as file_out:
for line in file_in:
if line != '\n':
line = re.sub(r'''
[\.|;|:|\?|!|,]* # . or ; or : or ? or ! or , が0回以上
\s # 空白
''', '\n', line, flags = re.VERBOSE)
print(line, file=file_out)
回答解説
正規表現
前回に続き正規表現を使った処理。今回は空白(スペース)を改行に置換です。
肯定の先/後読みアサーションがない分、今回の方がシンプルです。空白前に記号系があった場合も置換対象にしました。
出力結果(実行結果)
プログラム実行すると以下の結果(先頭20行抜粋)が出力されます。
051.result.txt(先頭20行抜粋)
Natural
language
processing
From
Wikipedia
the
free
encyclopedia
Natural
language
processing
(NLP)
is
a
field
of
computer
science