漢字仮名混じり文をローマ字に変換

記事タイトルとURLをコピーする

ローマ字はイタリア語と習った男塾技術四課のテツカです。

  1. Pykakasi とは?
  2. インストール
  3. スクリプト作成
  4. テスト
  5. まとめ

1. Pykakasi とは?

漢字仮名混じり文をローマ字に変換する Python Natural Language Processing(NLP)ライブラリです。

pykakasi is a Python Natural Language Processing (NLP) library to transliterate hiragana, katakana and kanji (Japanese text) into rōmaji (Latin/Roman alphabet). 引用元: Pykakasi > Overview

2. インストール

2019/12/13 現在、Pykakasi がサポートする Python は以下の通りです。

Pykakasi supports python 2.7, python 3.5, 3.6, 3.7, 3.8 and PyPy. 引用元: Supported python versions

今回は Python 3 が使える EC2 検証機を 1 台用意します。 [参考] Linux 仮想マシンの起動 / クラウドならアマゾン ウェブ サービス 【AWS 公式】

ログイン後、python3 と pykakasi をインストールします。

sudo yum -y install python3
pip3 install pykakasi --user

今回使用したバージョンは Python 3.7.4 、Pykakasi 1.2 です。

$ python3 -V
Python 3.7.4
$
$ pip3 show pykakasi
Name: pykakasi
Version: 1.2
Summary: Python implementation of kakasi - kana kanji simple inversion library
Home-page: http://github.com/miurahr/pykakasi
Author: Hiroshi Miura
Author-email: miurahr@linux.com
License: GPLv3
Location: /home/ec2-user/.local/lib/python3.7/site-packages
Requires: six, klepto 

3. スクリプト作成

以降のテストでは Examples を元にした下記スクリプトを利用します。

kana2romaji.py

import pykakasi

def convert_to_romaji(text):
    """
    漢字仮名混じり文をローマ字に変換する

    Parameters
    ----------
    text : str
        ローマ字に変換したい漢字仮名交じり文

    Returns
    -------
    result : str
        ローマ字に変換した文字列

    Notes
    -------
    下記サイトを参考に作成しました
    https://github.com/miurahr/pykakasi  
    """

    kakasi = pykakasi.kakasi()
    kakasi.setMode("H", "a")        # Hiragana to ascii
    kakasi.setMode("K", "a")        # Katakana to ascii
    kakasi.setMode("J", "a")        # Japanese to ascii
    kakasi.setMode("r", "Hepburn")  # use Hepburn Roman table
    kakasi.setMode("s", True)       # add space
    kakasi.setMode("C", False)      # no capitalize
    conv = kakasi.getConverter()
    result = conv.do(text)
    return result

if __name__ == "__main__":
    text = input()
    romaji = convert_to_romaji(text)
    print(romaji)

4. テスト

早口言葉

$ python3 kana2romaji.py <<<サバサバした鯖を砂漠で捌き売り捌くサバイバル
sabasaba shita saba wo sabaku de sabaki uri sabaku sabaibaru

完璧です。

山手線の駅一覧

[ソース] yamate

大崎  
品川  
田町  
浜松町 
新橋  
有楽町 
東京  
神田  
秋葉原 
御徒町
上野
鶯谷
日暮里
西日暮里
田端
駒込
巣鴨
大塚
池袋
目白
高田馬場
新大久保
新宿
代々木
原宿
渋谷
恵比寿
目黒
五反田

[結果]

$ cat yamate | while read line; do python3 kana2romaji.py <<<$line; done
osaki
shinagawa
tamachi
hamamatsuchou
shinbashi
yuurakuchou
toukyou
kanda
akihabara
okachimachi
ueno
uguisu tani
nippori
nishinippori
tabata
komagome
sugamo
ootsuka
ikebukuro
mejiro
takadanobaba
shin'ookubo
shinjuku
yoyogi
harajuku
shibuya
ebisu
meguro
gotanda
$ 

「toukyou」「uguisu tani」「shin'ookubo」が気になりますが、ちょっと試してみたいことが。

$ echo 高田馬場 | python3 kana2romaji.py
takadanobaba
$ echo ジャイアント馬場 | python3 kana2romaji.py
jaianto baba

これもすごい。高田馬場は takada no baba ですが、ジャイアント馬場は jaianto と baba の間に no がありません。

そして最後にー

$ echo 高輪ゲートウェイ! | python3 kana2romaji.py
takanawa geetouei !

ウエイ!(語彙力不足)

5. まとめ

Pykakasi で漢字仮名混じり文をローマ字に変換しましたが、かなりの精度で驚きました。 タグやリソース名の作成、チャット時の飛び道具としていかがでしょう?

以上