neologdn はテキストの正規化処理を行う Python ライブラリです。 より具体的に説明すると、neologdn は文字種の統一と不要な文字の除去を行ってくれるライブラリになります。
neologdn という名前の通り、もともとは形態素解析エンジン MeCab + mecab-ipadic-NEologd のための前処理用のライブラリのようですが、楽に正規化処理が行えることから、個人的には SentencePiece や Sudachi などを使用する場合でもこの neologdn を使ったりしています。
pip install neologdn
使い方はシンプルです。neologdn.normalize()
で正規化を行います。
import neologdn
neologdn.normalize('AI (人工知能)')
# -> 'AI (人工知能)'
neologdn.normalize('ディープラーニング')
# -> 'ディープラーニング'
基本的な正規化ルールは mecab-ipadic-NEologd の Wiki をベースにしているようです。このページにも Python で書かれた正規化のサンプルコードがありますが、neologdn ではこれと同等の処理を Cython で実装しており、約2倍の処理速度の向上がなされているとのことです。
オプション引数として repeat
が使用できます。これは、同じ文字(文字列)が連続するときに、何文字(回)に短縮するかを指定するものです。何も指定しない場合は短縮化はされません。
neologdn.normalize('うおおおおおお', repeat=2)
# -> 'うおお'
neologdn.normalize('うおおおおおお', repeat=4)
# -> 'うおおおお'
neologdn.normalize('うおおおおおお') # デフォルト引数
# -> 'うおおおおおお'
neologdn.normalize('ドンドンドンドンドンドンドンドン', repeat=2) # 2文字以上の文字列の繰り返しでも OK
# -> 'ドンドン'
ただし、repeat
の使い方を誤ると単語の意味が変わったり、文が成立しなくなったりする場合があるので注意が必要です(特に repeat=1
がかなり怪しいです)。
# 失敗例
neologdn.normalize('good', repeat=1)
# -> 'god'
neologdn.normalize('パパとママ', repeat=1)
# -> 'パとマ'
また、長音記号(ー
など)だけは例外で、repeat
による指定に関わらず、いずれの場合でも1文字に短縮されます。
neologdn.normalize('うおーーーーーー', repeat=2)
# -> 'うおー'
neologdn.normalize('うおーーーーーー', repeat=4)
# -> 'うおー'
neologdn.normalize('うおーーーーーー')
# -> 'うおー'
ぜひ、テキストの前処理に neologdn を使ってみてください。