https://crimnut.hateblo.jp/entry/2018/08/29/180455
ひらがなカタカナ漢字をローマ字に変換するpykakasiの使い方 - sushi.py
はじめに 以下の記事で映画レビューを収集したとき、ファイル名を作成するために漢字ひらがなカタカナをローマ字に変換できるpykakasiをつかいました。 crimnut.hateblo.jp 今回はそのpykakasiのインストールおよび使い方について説明します。 pykakasiとは pykakasiは、漢字かなまじりの文をひらがな文やローマ字文に変換するライブラリであるKAKASIをPythonで実装したパッケージです。 github.com pykakasiのインストール pykakasiは、sixとsemidbmに依存しているため、これらをインストールします。 pip install s...
crimnut.hateblo.jp
はじめに
以下の記事で映画レビューを収集したとき、ファイル名を作成するために漢字ひらがなカタカナをローマ字に変換できるpykakasiをつかいました。
今回はそのpykakasiのインストールおよび使い方について説明します。
pykakasiとは
pykakasiは、漢字かなまじりの文をひらがな文やローマ字文に変換するライブラリであるKAKASIをPythonで実装したパッケージです。
pykakasiのインストール
pykakasiは、sixとsemidbmに依存しているため、これらをインストールします。
pip install six semidbm |
pykakasiをインストールします。
pip install pykakasi |
pykakasiの使い方
サンプルコード
from pykakasi import kakasi text = u"これはひらがなコレハカタカナ漢字" kakasi = kakasi() # Generate kakasi instance kakasi.setMode("H", "a") # Hiragana to ascii kakasi.setMode("K", "a") # Katakana to ascii kakasi.setMode("J", "a") # Japanese(kanji) to ascii kakasi.setMode("r", "Hepburn") # Use Hepburn romanization conv = kakasi.getConverter() result = conv.do(text) print(result) |
結果
korehahiraganakorehakatakanakanji |
はじめにkakasi = kakasi()でkakasiインスタンスを生成します。
kakasi.setMode()で変換する対象を指定します。 kakasi.setMode("H", "a")とすると、ひらがなをローマ字に変換します。 同様に、kakasi.setMode("K", "a")とすると、カタカナをローマ字に変換してくれます。
conv = kakasi.getConverter() result = conv.do(text) |
はおまじないみたいなものです。
漢字だけローマ字に変換したい場合は、setMode("J", "a")とだけ指定します。
from pykakasi import kakasi text = u"ながいぞ京都府京都市東山区三条通南裏二筋目白川筋西入二丁目南側南木之元町" kakasi = kakasi() # Generate kakasi instance kakasi.setMode("J", "a") kakasi.setMode("r", "Hepburn") # Use Hepburn romanization conv = kakasi.getConverter() result = conv.do(text) print(result) |
結果
ながいぞkyoutofukyoutoshihigashiyamakusanjoutooriminamiuranisujimeshirakawasujishanyuunichoumeminamigawaminamikiyukimotomachi |
わかち書き
これでは読みにくいのでわかち書きして語と語の間に空白を入れます。 pykakasiでわかち書きをするにはsetMode("s", True)と指定します。
from pykakasi import kakasi, wakati text = u"京都府京都市東山区三条通南裏二筋目白川筋西入二丁目南側南木之元町" kakasi = kakasi() # Generate kakasi instance kakasi.setMode("J", "a") kakasi.setMode("r", "Hepburn") # Use Hepburn romanization kakasi.setMode("s", True) conv = kakasi.getConverter() result = conv.do(text) print(result) |
結果
kyoutofu kyoutoshi higashiyama ku sanjou toori minami ura ni sujime shirakawa suji shanyuu nichoume minamigawa minami ki yuki motomachi |
pykakasiでは日本語文字列のわかち書きも可能です。
from pykakasi import wakati text = u"京都府京都市東山区三条通南裏二筋目白川筋西入二丁目南側南木之元町" wakati = wakati() conv = wakati.getConverter() result = conv.do(text) print(result) |
結果
京都府 京都市 東山 区 三条 通 南 裏 二 筋目 白川 筋 西入 二丁目 南側 南 木 之 元町 |
おそらくこのテキストは複雑なため期待した結果とは少し異なった結果を返します。 しかし、たとえば「株式会社はてな」のような文字列ならばちゃんと「株式会社 はてな」と期待する位置に空白を入れて返してくれます。
kakasi.setMode()の整理
ここでkakasi.setMode()に整理しておきます。
setMode()は2つの引数をとり、第一引数を第二引数へと変換するように設定します。 これまでひらがな・カタカナ・漢字からローマ字への変換を扱ってきましたが、漢字からひらがな・カタカナへと変換することも可能です。
from pykakasi import kakasi text = u"疾風怒濤、天衣無縫、電光石火、焼肉定食、冷麺開始、通勤手当、就業規則、不当解雇、懲戒請求、書類送検" kakasi = kakasi() kakasi.setMode("J", "H") conv = kakasi.getConverter() result = conv.do(text) print(result) |
結果
しっぷうどとう、てんいむほう、でんこうせっか、やきにくていしょく、れいめんかいし、つうきんてあて、しゅうぎょうきそく、ふとうかいこ、ちょうかいせいきゅう、しょるいそうけん |
ただし、ひらがな・カタカナから漢字への変換は出来ません。 setMode("H", "J")とすると、
pykakasi.exceptions.InvalidModeValueException: Invalid value for mode |
とエラーが発生します。
ローマ字の指定
さて、ローマ字は大きく分けて2種類あります。 ひとつはヘボン式ローマ字(Hepburn romanization)です。 もうひとつが訓令式ローマ字(Kunrei-shiki romanization)です。
たとえば「し」を「shi」で表記するのがヘボン式で、「si」で表記するのが訓令式です。
pykakasiではこのヘボン式と訓令式の両方をサポートしています。なおPassportというモードもありますが、パスポートでつかわれるのはヘボン式であるため、ほぼヘボン式と同じと考えてよいと思います。
どのローマ字の種類を利用するかはsetMode()で設定します。 たとえば訓令式をつかう場合はsetMode("r", "Kunrei")とします。
from pykakasi import kakasi text = u"周防パトラ 西園寺メアリ 堰代ミコ 島村シャルロット 蒼月エリ" kakasi = kakasi() kakasi.setMode("J", "a") kakasi.setMode("K", "a") kakasi.setMode("r", "Hepburn") conv = kakasi.getConverter() result = conv.do(text) print(f"Hepburn: {result}") kakasi.setMode("r", "Kunrei") conv = kakasi.getConverter() result = conv.do(text) print(f"Kunrei: {result}") kakasi.setMode("r", "Passport") conv = kakasi.getConverter() result = conv.do(text) print(f"Passport: {result}") |
結果
Hepburn: suoupatora saionjimeari sekidaimiko shimamurasharurotto aogatsueri Kunrei: suoupatora saionzimeari sekidaimiko simamurasyarurotto aogatueri Passport: suopatora saionjimeari sekidaimiko shimamurasharurotto aogatsueri |
(「堰代ミコ」は「せきしろみこ」、「蒼月エリ」は「そうげつえり」と読むので微妙に読みが間違っていますが、この辺りはまだ難しいのでしょう)
そのほかの機能について
以上で紹介したひらがな・カタカナ・漢字の変換、わかち書き、ローマ字の指定に加えて、「空白の挿入」や「大文字で始める(capitalize)」や「すべての大文字にする」といった機能もあります。
それらの機能はsetMode()の第一引数にflagsを与え、第二引数にTrue, Falseの真偽値を渡すことで設定することができます。
現在実装されているフラグは以下の通りです。
"s": 語と語のあいだに空白を挿入する
"C": 大文字で始める
"U": すべて大文字にする
の3つです。
from pykakasi import kakasi, wakati text = u"刺身定食|牛丼大盛|欧州連合" kakasi = kakasi() kakasi.setMode("J", "a") kakasi.setMode("r", "Hepburn") kakasi.setMode("s", True) conv = kakasi.getConverter() result = conv.do(text) print(result) kakasi.setMode("C", True) conv = kakasi.getConverter() result = conv.do(text) print(result) kakasi.setMode("U", True) conv = kakasi.getConverter() result = conv.do(text) print(result) |
結果
sashimi teishoku |gyuudon oomori |oushuu rengou Sashimi Teishoku |Gyuudon Oomori |Oushuu Rengou SASHIMI TEISHOKU |GYUUDON OOMORI |OUSHUU RENGOU |
大文字から小文字に戻す機能は備わっていないためか、すべての大文字にするフラグUのあとに大文字ではじめるフラグCを設定すると、すべて大文字に変換されます。
from pykakasi import kakasi, wakati text = u"刺身定食|牛丼大盛|欧州連合" kakasi = kakasi() kakasi.setMode("J", "a") kakasi.setMode("K", "a") kakasi.setMode("r", "Hepburn") kakasi.setMode("s", True) conv = kakasi.getConverter() result = conv.do(text) print(result) kakasi.setMode("U", True) conv = kakasi.getConverter() result = conv.do(text) print(result) kakasi.setMode("C", True) conv = kakasi.getConverter() result = conv.do(text) print(result) |
結果
sashimi teishoku |gyuudon oomori |oushuu rengou SASHIMI TEISHOKU |GYUUDON OOMORI |OUSHUU RENGOU SASHIMI TEISHOKU |GYUUDON OOMORI |OUSHUU RENGOU |
'描く' 카테고리의 다른 글
Webアプリケーションコース (0) | 2021.07.02 |
---|---|
WAI-ARIA をマークアップに取り入れたシンプルなタブ (0) | 2021.07.02 |
勉強方法がわからない…そんなスランプ状態の時に出会ったのがパルミーでした (0) | 2021.07.02 |
ブラウザを開くだけで エディタ、Webサーバ、DB等の開発環境が整う クラウド開発環境PaizaCloudクラウドIDE (0) | 2021.07.02 |
デイジー~公爵の婚約者になる方法~ (0) | 2021.07.02 |
댓글