[mootools] ひらがなをローマ字に変換するクラス

人が作ったのを使って楽したかったんだけどいいのが無かったので、ひらがなをローマ字に変換するクラスを自作した。
タイピングゲーム製作でどうしても必要になる問題文章を、ひらがな(数字+一部記号も可)で作るだけで全部ローマ字に変換します。
※mootools.1.2が必要

日本語は母音と子音の組み合わせで出来てる。
「く」ならK+U、「し」ならS+I/SH+I/C+I、「わ」ならW+A。
入力方式が変わるのは、「し」や「じ」等特定の文字と、「ん」、小文字のや行、小文字の「つ」との組み合わせの時だけで
あとは特定の子音1種と母音5種類の組み合わせで成り立つ。

で、大体次のような流れで変換を行います。

  1. パブリックメソッドに文章投入→「このぶんしょうはさんぷるっぽいなにかです!」
  2. 1文字または2文字単位に分割して配列化。小文字は前後の文字とセットにする。
    →[こ,の,ぶ,ん,しょ,う,は,さ,ん,ぷ,る,っぽ,い,な,に,か,で,す]
    「っ」で終わる場合や記号・数字とセットになる場合はそれぞれを1文字とする。
  3. ループ文で1文字か2文字か判別。変換関数に飛ばす
    →こ:1文字  しょ:2文字
  4. 1文字の場合はそのまま変換。この時、入力方式の設定がある文字についてはその方式に従う。
    →こ:K+O  ん:NまたはNN
  5. 2文字の場合、最初に「つ」があるかどうか捜査。
    【小文字のつがある場合】
    2文字目を1文字変換のメソッドに通して子音を2つに増やす。
    →っぽ:P+PO →っと:T + TO
    【小文字のつがない場合】
    switch文で入力方式の設定がある文字(し+小文字や行、じ+小文字や行等)を変換。
    他は、1文字変換のメソッドに通して子音+小文字や行ローマ字にする。
    →しゃ:(SH)(SY)+A にゃ:N(i)+YA
  6. 結果を返す
    →[ko,no,bu,nn,syo,u,ha,sa,nn,pu,ru,ppo,i,na,ni,ka,de,su,!]
    →[k,o,n,o,b,u,n,n,s,y,o,u,h,a,s,a,n,n,p,u,r,u,p,p,o,i,n,a,n,i,k,a,d,e,s,u,!]

以下全文。長いw

※全角スペースが混じってたりすることがあるかも

配列からテキストにするときはjoin(“”)で。
mootools依存はClassflatten()indexOf()

テスト用ソース

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<title>Convert Roma test</title>
		<script type="text/javascript" src="js/mootools.js"></script>
		<script type="text/javascript" src="js/convert.js"></script>
		<script type="text/javascript">
			//<![CDATA[
			window.addEvent('domready', function(){
				
				$("text").addEvent('keydown',function(event){
					if(event.key=="enter"){
					var converter = new HiraganaToRoman("k","x","cy","sh","zy","s","j","t","h","t","n");
					var txt = converter.convert(this.value);
					$("test").set("text",txt);
					
					}
				});
			});
			//]]>
		</script>
	</head>
	<body id="body">
		<input type="text" id="text" size="40" />
		<div id="test"></div>
	</body>
</html>

「[mootools] ひらがなをローマ字に変換するクラス」への7件のフィードバック

  1. ピンバック: kana_to_roma | Otaxa
  2. ぐぐって、到着。 全角数字がだめでしたが、DMonkey用に改造して、使わせてください。お願いします。

    返信
  3. やっぱりタイピングゲーム用ですかね?(笑) 使用はご自由にどうぞ 😀
    全角数字はthis.numberと同じ配列を全角数字で作って
    _baseOne()に条件追加すれば対応出来ると思います。
    全角→半角もするのなら、配列のキー番号を使えば簡単に。

    返信
  4. さっそくのお返事ありがとうございます。
    がっつり使わせていただきます。^^;
    タイピングゲームじゃないんですよ~。
    郵便番号から住所を検索したりするのを応用して、地名をローマ字にして検索キーに使うつもりです。
    現在、変換中なのですが8時間経っても終わりません;_;

    返信
  5. あ、なるほど検索キーですか。そういう使い道もあったんですねー。
    DMonkeyは触った事ないんですが変換で何かハマるポイントがあったんでしょうか?

    返信
  6. もっと最適化してから実行すれば良かったのかと。。。
    全国の地域名称のデータの件数が、12万4000件、約14Mのテキストデータです。
    変換作業に、約11時間でした。 なにはともあれ、感謝。

    返信
  7. 12万件通すのに11時間ということでしたか(笑)
    いやはやお疲れ様でした。

    返信

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください