データ分析をする際に、文字の扱いは重要である。
何故なら文字が違えばデータとしては異なるものになってしまうから。
例えば リンゴ
と リンゴ
。
意味するものは同じだが、全角と半角で文字が違うのでデータとしては別物になる。
表記ゆれについて、以前Twitterでこのような投稿があった。
旧帝国大学大学院理学部数学科博士先輩が作ってくれた全角半角の表記揺れを直す関数
先輩の数学的頭脳と才能と時間がこんなことに費やされている事実に泣いてる pic.twitter.com/Lo2TleBT6B— a_yam (@yachts111xenon) September 17, 2021
このケースでは旧帝国大学大学院理学部数学科博士先輩がカタカナ1文字ずつ対応表を作っていたようだ。
これをいちいち作るのは大変だし、効率が悪い。
何か効率よく半角全角カタカナの表記ゆれを直す方法はないのか。
そこで今回はPythonで英数字は変えずに半角カタカナを全角に変換する方法について紹介する。
この記事を書いている人
記事を読むメリット
Pythonで英数字は変えずに半角カタカナを全角に変換する方法がわかり、文字違いに悩まされることがなくなる。
Pythonで英数字は変えずに半角カタカナを全角に変換する方法
表記ゆれを無くす。
カタカナや文字レベルの表記ゆれはPythonで修正できる。
Pythonで半角カタカナを全角にする方法、それには unicodedata
を使うのをオススメする。
使い方は簡単。
まずは最初にライブラリをインポートする。
import unicodedata
そして変換したいテキストを用意する。
from pprint import pprint text_list = [ "アイウエオガギグゲゴ 12345", "アイウエオガギグゲゴ ①②③④⑤", "ABCDEabcde é ё αβ", "ABCDEabcde é ё αβ", "㈱㈲㌍㌢", "!#$%&¥()*+,-./:;" ] pprint(text_list) # ['アイウエオガギグゲゴ 12345', # 'アイウエオガギグゲゴ\u3000①②③④⑤', # 'ABCDEabcde é ё αβ', # 'ABCDEabcde é ё αβ', # '㈱㈲㌍㌢', # '!#$%&¥()*+,-./:;']
pprint
はリストをキレイに表示する為に使用している。
そしてテキストの中身を変換する。
text_list_norm = [] for text in text_list: text_list_norm.append(unicodedata.normalize('NFKC', text)) pprint(text_list_norm) # ['アイウエオガギグゲゴ 12345', # 'アイウエオガギグゲゴ 12345', # 'ABCDEabcde é ё αβ', # 'ABCDEabcde é ё αβ', # '(株)(有)カロリーセンチ', # '!#$%&¥()*+,-./:;']
変換に使用しているのは unicodedata.normalize('NFKC', text)
の部分。
最初の引数である NFKC
はテキストを変換する際の正規形のタイプ。
いくつかタイプがあるが、とりあえず NFKC
を指定しておけば良い。
そして2つめの引数が変換したい対象のテキスト。
これで変換ができる。
結果として着目したいのは単純に半角から全角にするわけではないこと。
正規化した場合、以下のような変換が行われる。
ココがポイント
このUnicode正規化を行うことで表記ゆれがかなり減ることだろう。
まとめ
今回はPythonで英数字は変えずに半角カタカナを全角に変換する方法について解説した。
半角カタカナを全角カタカナにする。
つまりは文字の表記ゆれを減らしたい場合には unicodedata.normalize('NFKC', text)
を使ってUnicode正規化しよう。
Unicode正規化によってこのような変換が行われる。
ココがポイント
unicodedata
の詳細についてはドキュメントを参照。
他にもBigQuery上で文字列を正規化する方法もあるので、気になったら見てみて欲しい。