Edited at

日本語以外の文字と記号を排除し日本語の平文コーパスを作成する呪文

More than 3 years have passed since last update.

日本語の自然言語ライブラリの中には、ヘブライ語や韓国語をぶちこんだ瞬間にエラーで処理が止まるライブラリ多いです。そんなときに便利な呪文を紹介します。


たとえばPyCon2015で紹介されたのjanomeは韓国語が混入するとエラーで死ぬ

janomeはMeCabをインストールする手間を省いてくれる素晴らしい形態素解析器なのですが、日本語以外の文字が1文字でも混入するとエラーで死にます。wikipediaの左言語切り換えバーを読み込んだ例だと...


wikipediaの左のバーより

text = "他言語版Italiano한국어PolskiSimple English"

t = Tokenizer()
for token in t.tokenize(text):
print token

---------------
Traceback (most recent call last):
File "tests.py", line 98, in <module>
for token in t.tokenize(text):
File "lib/python2.7/site-packages/janome/tokenizer.py", line 107, in tokenize
pos += lattice.forward()
File "lib/python2.7/site-packages/janome/lattice.py", line 124, in forward
while not self.enodes[self.p]:
IndexError: list index out of range



そんなときはこの呪文

import re

import nltk

def filter(text):
"""
:param text: str
:rtype : str
"""

# アルファベットと半角英数と記号と改行とタブを排除
text = re.sub(r'[a-zA-Z0-9¥"¥.¥,¥@]+', '', text)
text = re.sub(r'[!"“#$%&()\*\+\-\.,\/:;<=>?@\[\\\]^_`{|}~]', '', text)
text = re.sub(r'[\n|\r|\t]', '', text)

# 日本語以外の文字を排除(韓国語とか中国語とかヘブライ語とか)
jp_chartype_tokenizer = nltk.RegexpTokenizer(u'([ぁ-んー]+|[ァ-ンー]+|[\u4e00-\u9FFF]+|[ぁ-んァ-ンー\u4e00-\u9FFF]+)')
text = "".join(jp_chartype_tokenizer.tokenize(text))
return text

text = "他言語版Italiano한국어PolskiSimple English"
text = filter(text)
t = Tokenizer()
for token in t.tokenize(text):
print token

------------------
接頭詞,名詞接続,*,*,*,*,,,
言語 名詞,一般,*,*,*,*,言語,ゲンゴ,ゲンゴ
名詞,接尾,一般,*,*,*,,バン,バン