![見出し画像](https://assets.st-note.com/production/uploads/images/97812441/rectangle_large_type_2_1e7532b0b093236913310a13d22e3d61.png?width=1200)
SudachiPy による自然言語処理の正規化
「SudachiPy」による自然言語処理の「正規化」についてまとめました。
1. SudachiPy
「SudachiPy」はワークス徳島人工知能NLP研究所が開発している形態素解析器「Sudachi」のPython版です。
2. 正規化
「正規化」とは、同じ意味の単語を統一的な内部表現に変換することで、テキストの比較を容易にする処理です。これによって、全角の「ネコ」や半角の「ネコ」やひらがなの「ねこ」を同じ単語として処理できるようになります。
「Sudachi」では、この「正規化」の機能が提供されています。
3. Sudachiの単語の正規化
「Sudachi」の、以下のような単語の正規化を提供します。
(1) 送り違い : 【例】打込む → 打ち込む
(2) 字種 : 【例】かつ丼 → カツ丼
(3) 異体字 : 【例】附属 → 付属
(4) 誤用 : 【例】シュミレーション → シミュレーション
(5) 縮約: 【例】ちゃあ → ては
「Sudachi」の同義語辞書については、以下が参考になります。
4. Sudachiの文字の正規化
「Sudachi」では、以下のような文字の正規化を提供します。
(1) rewrite.defで定義される文字列置換
(2) 小文字化
(3) Unicode正規化(NFKC)
ただし、(3)は、「rewrite.def」で定義される文字には適用しません。
4-1. rewrite.defで定義される文字列置換
「rewrite.def」には、置換対象と置換先の文字列のペアが記載されています。
# 置換対象 置換先
A' Ā
1つの文字列のみ記載されている場合は、文字列正規化の抑制となります。
# 文字列正規化の抑制
髙
4-2. 小文字化
アルファベットを小文字で統一します。(Character.toLowerCase())
iPhone → iphone
4-3. Unicode正規化(NFKC)
「Unicode正規化」は、同じ意味の単語を統一的な内部表現に変換する正規化処理のひとつです。「Unicode正規化」には以下の4種類が存在し、「NFKC」がよく利用されます。
・NFD (Normalization Form Canonical Decomposition)
・NFC (Normalization Form Canonical Composition)
・NFKD (Normalization Form Compatibility Decomposition)
・NFKC (Normalization Form Compatibility Composition)
5. Sudachiの正規化を試す
「Google Colab」と「SudachiPy」(SudachiのPythonラッパー)で「Sudachi」の正規化を試してみます。
(1) SudaciPyのインストール。
# SudaciPyのインストール
!pip install sudachipy sudachidict_core
(2) メニュー「ランタイム → ランタイムを再起動」。
(3) トークナイザーの準備。
from sudachipy import tokenizer
from sudachipy import dictionary
# トークナイザーの準備
tokenizer_obj = dictionary.Dictionary().create()
(4) 正規化関数の定義と実行。
# 正規化関数の定義
def wakati_normalized( sentence ):
mode = tokenizer.Tokenizer.SplitMode.C
return " ".join( [m.normalized_form() for m in tokenizer_obj.tokenize(sentence, mode)] )
# 正規化関数の実行
wakati_normalized("しょう油を1本買いました")
'醤油 を 1 本 買う ます た'
「しょう油→醤油」「1(全角)→1(半角)」「買い→買う」「まし→ます」と変換されていることがわかります。
この記事が気に入ったらサポートをしてみませんか?