Python

Pythonで英数字は変えずに半角カタカナを全角に変換する方法

データに半角カタカナと全角カタカナが混在してて使いづらい。何とか統一できない?

データ分析をする際に、文字の扱いは重要である。

何故なら文字が違えばデータとしては異なるものになってしまうから

例えば リンゴリンゴ

意味するものは同じだが、全角と半角で文字が違うのでデータとしては別物になる。

表記ゆれについて、以前Twitterでこのような投稿があった。


これは悲劇…


このケースでは旧帝国大学大学院理学部数学科博士先輩がカタカナ1文字ずつ対応表を作っていたようだ。

これをいちいち作るのは大変だし、効率が悪い。

何か効率よく半角全角カタカナの表記ゆれを直す方法はないのか。

そこで今回はPythonで英数字は変えずに半角カタカナを全角に変換する方法について紹介する。

この記事を書いている人


システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。

記事を読むメリット

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上で文字列を正規化する方法もあるので、気になったら見てみて欲しい。

    ITipsと同じようなブログを作る方法

    ブログに興味がありますか?

    もしブログに興味がある場合は↓このページ↓を参考にすれば、ITipsと同じ構成でブログを作ることができます

    サーバー、ドメイン、ASPと【ブログに必要なものは全て】このページに書きました。
    同じ構成でブログ作るのはいいけど、記事はマネしないでネ (TДT;)

    ランキング参加中

    にほんブログ村 IT技術ブログへ

    他にもブログやSNSで紹介してくれると励みになります。

    はてブのコメントで酷評されると泣きます(´;ω;`)

    -Python
    -

    Translate »

    © 2021 ITips