kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

pythonで漢字 -> ひらがな 変換

友人がとあるサービスを触っていて、「氏名の漢字がひらがなに自動で変換される。すごいね」と言っていたので、「へー」と答えつつ、たぶんできるよな。と思ったのでコード作成。

調べてみるとpythonが良さそう。phpでも調べたけどあまり良さそうなのがなかった。

コード

from pykakasi import kakasi

def convertToKakashi(text):
    # オブジェクトをインスタンス化
    kks = kakasi()
    # 変換して出力
    result = kks.convert(text)
    for item in result:
        print("{}: kana '{}', hiragana '{}', romaji: '{}'".format(item['orig'], item['kana'], item['hira'],
                                                                  item['hepburn']))
    return result
import convert

text = "形態素解析"
convert.convertToKakashi(text)
形態素解析: kana 'ケイタイソカイセキ', hiragana 'けいたいそかいせき', romaji: 'keitaisokaiseki'

なんかできてますね。

さらにテスト

import convert
from faker.factory import Factory

Faker = Factory.create
fake = Faker()
fake.seed(0)
fake = Faker("ja_JP")

for_ in range(100):
    convert.convertToKakashi(fake.name())
山本: kana 'ヤマモト', hiragana 'やまもと', romaji: 'yamamoto'
結衣: kana 'ユイ', hiragana 'ゆい', romaji: 'yui'
加藤: kana 'カトウ', hiragana 'かとう', romaji: 'katou'
香織: kana 'カオリ', hiragana 'かおり', romaji: 'kaori'
鈴木: kana 'スズキ', hiragana 'すずき', romaji: 'suzuki'
美加子: kana 'ミカコ', hiragana 'みかこ', romaji: 'mikako'
伊藤: kana 'イトウ', hiragana 'いとう', romaji: 'itou'
浩: kana 'ヒロシ', hiragana 'ひろし', romaji: 'hiroshi'
太田: kana 'オオタ', hiragana 'おおた', romaji: 'oota'
裕美子: kana 'ユミコ', hiragana 'ゆみこ', romaji: 'yumiko'
石川: kana 'イシカワ', hiragana 'いしかわ', romaji: 'ishikawa'
康弘: kana 'ヤスヒロ', hiragana 'やすひろ', romaji: 'yasuhiro'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
浩: kana 'ヒロシ', hiragana 'ひろし', romaji: 'hiroshi'
近藤: kana 'コンドウ', hiragana 'こんどう', romaji: 'kondou'
裕樹: kana 'ヒロキ', hiragana 'ひろき', romaji: 'hiroki'
中村: kana 'ナカムラ', hiragana 'なかむら', romaji: 'nakamura'
陽子: kana 'ヨウコ', hiragana 'ようこ', romaji: 'youko'
三浦: kana 'ミウラ', hiragana 'みうら', romaji: 'miura'
学: kana 'ガク', hiragana 'がく', romaji: 'gaku'
三浦: kana 'ミウラ', hiragana 'みうら', romaji: 'miura'
香織: kana 'カオリ', hiragana 'かおり', romaji: 'kaori'
坂本: kana 'サカモト', hiragana 'さかもと', romaji: 'sakamoto'
美加子: kana 'ミカコ', hiragana 'みかこ', romaji: 'mikako'
渡辺: kana 'ワタナベ', hiragana 'わたなべ', romaji: 'watanabe'
裕美子: kana 'ユミコ', hiragana 'ゆみこ', romaji: 'yumiko'
高橋: kana 'タカハシ', hiragana 'たかはし', romaji: 'takahashi'
洋介: kana 'ヨウスケ', hiragana 'ようすけ', romaji: 'yousuke'
中島: kana 'ナカジマ', hiragana 'なかじま', romaji: 'nakajima'
桃子: kana 'モモコ', hiragana 'ももこ', romaji: 'momoko'
小林: kana 'コバヤシ', hiragana 'こばやし', romaji: 'kobayashi'
くみ: kana 'クミ', hiragana 'くみ', romaji: 'kumi'
子: kana 'コ', hiragana 'こ', romaji: 'ko'
山本: kana 'ヤマモト', hiragana 'やまもと', romaji: 'yamamoto'
花子: kana 'ハナコ', hiragana 'はなこ', romaji: 'hanako'
小林: kana 'コバヤシ', hiragana 'こばやし', romaji: 'kobayashi'
裕美子: kana 'ユミコ', hiragana 'ゆみこ', romaji: 'yumiko'
森: kana 'モリ', hiragana 'もり', romaji: 'mori'
和也: kana 'カズヤ', hiragana 'かずや', romaji: 'kazuya'
藤原: kana 'フジワラ', hiragana 'ふじわら', romaji: 'fujiwara'
修平: kana 'シュウヘイ', hiragana 'しゅうへい', romaji: 'shuuhei'
伊藤: kana 'イトウ', hiragana 'いとう', romaji: 'itou'
智也: kana 'トモヤ', hiragana 'ともや', romaji: 'tomoya'
岡本: kana 'オカモト', hiragana 'おかもと', romaji: 'okamoto'
裕樹: kana 'ヒロキ', hiragana 'ひろき', romaji: 'hiroki'
青木: kana 'アオキ', hiragana 'あおき', romaji: 'aoki'
翼: kana 'ツバサ', hiragana 'つばさ', romaji: 'tsubasa'
高橋: kana 'タカハシ', hiragana 'たかはし', romaji: 'takahashi'
拓真: kana 'タクマ', hiragana 'たくま', romaji: 'takuma'
太田: kana 'オオタ', hiragana 'おおた', romaji: 'oota'
涼平: kana 'リョウヘイ', hiragana 'りょうへい', romaji: 'ryouhei'
吉田: kana 'ヨシダ', hiragana 'よしだ', romaji: 'yoshida'
和也: kana 'カズヤ', hiragana 'かずや', romaji: 'kazuya'
渡辺: kana 'ワタナベ', hiragana 'わたなべ', romaji: 'watanabe'
あすか: kana 'アスカ', hiragana 'あすか', romaji: 'asuka'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
陽子: kana 'ヨウコ', hiragana 'ようこ', romaji: 'youko'
田中: kana 'タナカ', hiragana 'たなか', romaji: 'tanaka'
あすか: kana 'アスカ', hiragana 'あすか', romaji: 'asuka'
高橋: kana 'タカハシ', hiragana 'たかはし', romaji: 'takahashi'
あすか: kana 'アスカ', hiragana 'あすか', romaji: 'asuka'
岡本: kana 'オカモト', hiragana 'おかもと', romaji: 'okamoto'
陽一: kana 'ヨウイチ', hiragana 'よういち', romaji: 'youichi'
長谷川: kana 'ハセガワ', hiragana 'はせがわ', romaji: 'hasegawa'
知実: kana 'トモミ', hiragana 'ともみ', romaji: 'tomomi'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
真綾: kana 'マアヤ', hiragana 'まあや', romaji: 'maaya'
藤井: kana 'フジイ', hiragana 'ふじい', romaji: 'fujii'
桃子: kana 'モモコ', hiragana 'ももこ', romaji: 'momoko'
田中: kana 'タナカ', hiragana 'たなか', romaji: 'tanaka'
充: kana 'ジュウ', hiragana 'じゅう', romaji: 'juu'
福田: kana 'フクダ', hiragana 'ふくだ', romaji: 'fukuda'
英樹: kana 'ヒデキ', hiragana 'ひでき', romaji: 'hideki'
高橋: kana 'タカハシ', hiragana 'たかはし', romaji: 'takahashi'
明美: kana 'アケミ', hiragana 'あけみ', romaji: 'akemi'
井上: kana 'イノウエ', hiragana 'いのうえ', romaji: 'inoue'
拓真: kana 'タクマ', hiragana 'たくま', romaji: 'takuma'
鈴木: kana 'スズキ', hiragana 'すずき', romaji: 'suzuki'
浩: kana 'ヒロシ', hiragana 'ひろし', romaji: 'hiroshi'
山崎: kana 'ヤマザキ', hiragana 'やまざき', romaji: 'yamazaki'
直樹: kana 'ナオキ', hiragana 'なおき', romaji: 'naoki'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
零: kana 'レイ', hiragana 'れい', romaji: 'rei'
山口: kana 'ヤマグチ', hiragana 'やまぐち', romaji: 'yamaguchi'
七: kana 'シチ', hiragana 'しち', romaji: 'shichi'
夏: kana 'ナツ', hiragana 'なつ', romaji: 'natsu'
松本: kana 'マツモト', hiragana 'まつもと', romaji: 'matsumoto'
晃: kana 'アキラ', hiragana 'あきら', romaji: 'akira'
佐々木: kana 'ササキ', hiragana 'ささき', romaji: 'sasaki'
結衣: kana 'ユイ', hiragana 'ゆい', romaji: 'yui'
中島: kana 'ナカジマ', hiragana 'なかじま', romaji: 'nakajima'
陽子: kana 'ヨウコ', hiragana 'ようこ', romaji: 'youko'
福田: kana 'フクダ', hiragana 'ふくだ', romaji: 'fukuda'
七: kana 'シチ', hiragana 'しち', romaji: 'shichi'
夏: kana 'ナツ', hiragana 'なつ', romaji: 'natsu'
三浦: kana 'ミウラ', hiragana 'みうら', romaji: 'miura'
幹: kana 'カン', hiragana 'かん', romaji: 'kan'
鈴木: kana 'スズキ', hiragana 'すずき', romaji: 'suzuki'
陽子: kana 'ヨウコ', hiragana 'ようこ', romaji: 'youko'
田中: kana 'タナカ', hiragana 'たなか', romaji: 'tanaka'
浩: kana 'ヒロシ', hiragana 'ひろし', romaji: 'hiroshi'
田中: kana 'タナカ', hiragana 'たなか', romaji: 'tanaka'
陽子: kana 'ヨウコ', hiragana 'ようこ', romaji: 'youko'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
美加子: kana 'ミカコ', hiragana 'みかこ', romaji: 'mikako'
田中: kana 'タナカ', hiragana 'たなか', romaji: 'tanaka'
陽子: kana 'ヨウコ', hiragana 'ようこ', romaji: 'youko'
斉藤: kana 'サイトウ', hiragana 'さいとう', romaji: 'saitou'
桃子: kana 'モモコ', hiragana 'ももこ', romaji: 'momoko'
中村: kana 'ナカムラ', hiragana 'なかむら', romaji: 'nakamura'
幹: kana 'カン', hiragana 'かん', romaji: 'kan'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
さゆり: kana 'サユリ', hiragana 'さゆり', romaji: 'sayuri'
鈴木: kana 'スズキ', hiragana 'すずき', romaji: 'suzuki'
加奈: kana 'カナ', hiragana 'かな', romaji: 'kana'
三浦: kana 'ミウラ', hiragana 'みうら', romaji: 'miura'
英樹: kana 'ヒデキ', hiragana 'ひでき', romaji: 'hideki'
阿部: kana 'アベ', hiragana 'あべ', romaji: 'abe'
洋介: kana 'ヨウスケ', hiragana 'ようすけ', romaji: 'yousuke'
小林: kana 'コバヤシ', hiragana 'こばやし', romaji: 'kobayashi'
舞: kana 'マイ', hiragana 'まい', romaji: 'mai'
山口: kana 'ヤマグチ', hiragana 'やまぐち', romaji: 'yamaguchi'
涼平: kana 'リョウヘイ', hiragana 'りょうへい', romaji: 'ryouhei'
遠藤: kana 'エンドウ', hiragana 'えんどう', romaji: 'endou'
桃子: kana 'モモコ', hiragana 'ももこ', romaji: 'momoko'
阿部: kana 'アベ', hiragana 'あべ', romaji: 'abe'
直子: kana 'ナオコ', hiragana 'なおこ', romaji: 'naoko'
林: kana 'ハヤシ', hiragana 'はやし', romaji: 'hayashi'
明美: kana 'アケミ', hiragana 'あけみ', romaji: 'akemi'
吉田: kana 'ヨシダ', hiragana 'よしだ', romaji: 'yoshida'
くみ: kana 'クミ', hiragana 'くみ', romaji: 'kumi'
子: kana 'コ', hiragana 'こ', romaji: 'ko'
佐々木: kana 'ササキ', hiragana 'ささき', romaji: 'sasaki'
涼平: kana 'リョウヘイ', hiragana 'りょうへい', romaji: 'ryouhei'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
治: kana 'オサム', hiragana 'おさむ', romaji: 'osamu'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
充: kana 'ジュウ', hiragana 'じゅう', romaji: 'juu'
松本: kana 'マツモト', hiragana 'まつもと', romaji: 'matsumoto'
七: kana 'シチ', hiragana 'しち', romaji: 'shichi'
夏: kana 'ナツ', hiragana 'なつ', romaji: 'natsu'
山田: kana 'ヤマダ', hiragana 'やまだ', romaji: 'yamada'
明美: kana 'アケミ', hiragana 'あけみ', romaji: 'akemi'
斎藤: kana 'サイトウ', hiragana 'さいとう', romaji: 'saitou'
洋介: kana 'ヨウスケ', hiragana 'ようすけ', romaji: 'yousuke'
阿部: kana 'アベ', hiragana 'あべ', romaji: 'abe'
裕樹: kana 'ヒロキ', hiragana 'ひろき', romaji: 'hiroki'
鈴木: kana 'スズキ', hiragana 'すずき', romaji: 'suzuki'
太郎: kana 'タロウ', hiragana 'たろう', romaji: 'tarou'
伊藤: kana 'イトウ', hiragana 'いとう', romaji: 'itou'
洋介: kana 'ヨウスケ', hiragana 'ようすけ', romaji: 'yousuke'
鈴木: kana 'スズキ', hiragana 'すずき', romaji: 'suzuki'
美加子: kana 'ミカコ', hiragana 'みかこ', romaji: 'mikako'
山田: kana 'ヤマダ', hiragana 'やまだ', romaji: 'yamada'
零: kana 'レイ', hiragana 'れい', romaji: 'rei'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
七: kana 'シチ', hiragana 'しち', romaji: 'shichi'
夏: kana 'ナツ', hiragana 'なつ', romaji: 'natsu'
田中: kana 'タナカ', hiragana 'たなか', romaji: 'tanaka'
篤司: kana 'アツシ', hiragana 'あつし', romaji: 'atsushi'
小林: kana 'コバヤシ', hiragana 'こばやし', romaji: 'kobayashi'
聡太郎: kana 'ソウタロウ', hiragana 'そうたろう', romaji: 'soutarou'
鈴木: kana 'スズキ', hiragana 'すずき', romaji: 'suzuki'
太一: kana 'タイチ', hiragana 'たいち', romaji: 'taichi'
佐藤: kana 'サトウ', hiragana 'さとう', romaji: 'satou'
舞: kana 'マイ', hiragana 'まい', romaji: 'mai'
高橋: kana 'タカハシ', hiragana 'たかはし', romaji: 'takahashi'
知実: kana 'トモミ', hiragana 'ともみ', romaji: 'tomomi'
鈴木: kana 'スズキ', hiragana 'すずき', romaji: 'suzuki'
知実: kana 'トモミ', hiragana 'ともみ', romaji: 'tomomi'
中川: kana 'ナカガワ', hiragana 'なかがわ', romaji: 'nakagawa'
太一: kana 'タイチ', hiragana 'たいち', romaji: 'taichi'
山本: kana 'ヤマモト', hiragana 'やまもと', romaji: 'yamamoto'
加奈: kana 'カナ', hiragana 'かな', romaji: 'kana'
小川: kana 'オガワ', hiragana 'おがわ', romaji: 'ogawa'
裕太: kana 'ユウタ', hiragana 'ゆうた', romaji: 'yuuta'
藤田: kana 'フジタ', hiragana 'ふじた', romaji: 'fujita'
亮介: kana 'リョウスケ', hiragana 'りょうすけ', romaji: 'ryousuke'
林: kana 'ハヤシ', hiragana 'はやし', romaji: 'hayashi'
陽子: kana 'ヨウコ', hiragana 'ようこ', romaji: 'youko'
後藤: kana 'ゴトウ', hiragana 'ごとう', romaji: 'gotou'
学: kana 'ガク', hiragana 'がく', romaji: 'gaku'
藤原: kana 'フジワラ', hiragana 'ふじわら', romaji: 'fujiwara'
晃: kana 'アキラ', hiragana 'あきら', romaji: 'akira'
森: kana 'モリ', hiragana 'もり', romaji: 'mori'
健一: kana 'ケンイチ', hiragana 'けんいち', romaji: 'ken'ichi'
小川: kana 'オガワ', hiragana 'おがわ', romaji: 'ogawa'
七: kana 'シチ', hiragana 'しち', romaji: 'shichi'
夏: kana 'ナツ', hiragana 'なつ', romaji: 'natsu'
斎藤: kana 'サイトウ', hiragana 'さいとう', romaji: 'saitou'
零: kana 'レイ', hiragana 'れい', romaji: 'rei'
長谷川: kana 'ハセガワ', hiragana 'はせがわ', romaji: 'hasegawa'
里佳: kana 'リカ', hiragana 'りか', romaji: 'rika'
藤原: kana 'フジワラ', hiragana 'ふじわら', romaji: 'fujiwara'
直子: kana 'ナオコ', hiragana 'なおこ', romaji: 'naoko'
吉田: kana 'ヨシダ', hiragana 'よしだ', romaji: 'yoshida'
康弘: kana 'ヤスヒロ', hiragana 'やすひろ', romaji: 'yasuhiro'
村上: kana 'ムラカミ', hiragana 'むらかみ', romaji: 'murakami'
亮介: kana 'リョウスケ', hiragana 'りょうすけ', romaji: 'ryousuke'
前田: kana 'マエダ', hiragana 'まえだ', romaji: 'maeda'
太郎: kana 'タロウ', hiragana 'たろう', romaji: 'tarou'
山口: kana 'ヤマグチ', hiragana 'やまぐち', romaji: 'yamaguchi'
智也: kana 'トモヤ', hiragana 'ともや', romaji: 'tomoya'
中島: kana 'ナカジマ', hiragana 'なかじま', romaji: 'nakajima'
翔太: kana 'ショウタ', hiragana 'しょうた', romaji: 'shouta'

まとめ

文節でおかしいのもあるけど、それなりに変換できています。完璧である必要はないので補助的に使えそうなことがわかりました。

ほかにもMeCab形態素解析でもできるみたいですが、インストールとかありそうで今回はやりませんでした。

github.com

ライセンスが気になります。ライセンスに詳しくないので、GPLの文言をみるだけで怖いんですが、大丈夫ですかね。

MITかapacheライセンス以外だと使うのに抵抗があります。何回か理解しようと調べてはいるんですが、理解できない。製品に含めたらダメとか、静的な状態で使用するなら大丈夫とか、理解度が低い。

web系の人で理解している人、少なそう。ライセンス販売している先輩や前の会社の上司はちゃんと理解している人いたので、聞いておけばよかった。

本を買って読んでないことを思い出したので読んでみたいと思います。

結論としては、「すごいなー。」と思っているものでも結構簡単にできることもある。ということです。

世の中の難しい部分を簡単にしてくれている方々に感謝です。