Babigoバビゴ関数

本ページには広告が含まれています。

入力した文字列をバビ語に符号化・復号します。入力された文字列のひらがな・カタカナの部分をバビ語に変換し、それ以外の文字・記号などは変換しません。

構文
  1. UString = Babigo.encode( str )
  2. UString = Babigo.decode( str )
引数
str 必須
encode
バビ語に符号化する文字列
decode
バビ語から復号する文字列
戻り値
符号化・復号した文字列

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   str : (encode : バビ語に符号化する文字列、decode : バビ語から復号する文字列) 
// 【戻り値】
//   
//////////////////////////////////////////////////
MODULE BABIGO
	HASHTBL babigo
	PROCEDURE BABIGO()
		DIM array[][1] = "あ,か,さ,た,な,は,ま,や,ら,わ,が,ざ,だ,ば,ぱ,ゃ,ぁ", "ば", _
							"い,き,し,ち,に,ひ,み,り,ぎ,じ,ぢ,び,ぴ,ぃ", "び", _
							"う,く,す,つ,ぬ,ふ,む,ゆ,る,ん,ぐ,ず,づ,ぶ,ぷ,ゅ,ぅ", "ぶ", _
							"え,け,せ,て,ね,へ,め,れ,げ,ぜ,で,べ,ぺ,ぇ", "べ", _
							"お,こ,そ,と,の,ほ,も,よ,ろ,ご,ぞ,ど,ぼ,ぽ,ょ,ぉ", "ぼ", _
							"ア,カ,サ,タ,ナ,ハ,マ,ヤ,ラ,ワ,ガ,ザ,ダ,バ,パ,ャ,ァ", "バ", _
							"イ,キ,シ,チ,ニ,ヒ,ミ,リ,ギ,ジ,ヂ,ビ,ピ,ィ", "ビ", _
							"ウ,ク,ス,ツ,ヌ,フ,ム,ユ,ル,ン,グ,ズ,ヅ,ブ,プ,ュ,ゥ", "ブ", _
							"エ,ケ,セ,テ,ネ,ヘ,メ,レ,ゲ,ゼ,デ,ベ,ペ,ェ", "ベ", _
							"オ,コ,ソ,ト,ノ,ホ,モ,ヨ,ロ,ゴ,ゾ,ド,ボ,ポ,ョ,ォ", "ボ"
		FOR i = 0 TO RESIZE(array)
			FOR item IN SPLIT(array[i][0], ",")
				babigo[item] = item + array[i][1]
			NEXT
		NEXT
	FEND
	FUNCTION encode(str)
		DIM boin[] = "ぁ", "ぃ", "ぅ", "ぇ", "ぉ", "ァ", "ィ", "ゥ", "ェ", "ォ"
		DIM yoon[] = "ゃ", "ゅ", "ょ", "ャ", "ュ", "ョ"
		DIM sokuon[] = "っ", "ッ"
		DIM b[] = "ば", "び", "ぶ", "べ", "ぼ", "バ", "ビ", "ブ", "ベ", "ボ"
		DIM res = ""
		DIM tmp = ""
		WHILE str <> ""
			s = COPY(str, 2, 1)
			len = IIF(inArray(s, boin) OR inArray(s, yoon), 2, 1)
			tmp = COPY(str, 1, len)
			IFB LENGTH(tmp) = 1 THEN
				res = res + IIF(babigo[tmp, HASH_EXISTS], babigo[tmp], tmp)
			ELSE
				res = res + COPY(tmp, 1, 1) + babigo[COPY(tmp, 2, 1)]
			ENDIF
			IF COPY(res, LENGTH(res)) = "ー" THEN res = res + COPY(res, LENGTH(res)-1, 1) 
			str = COPY(str, len + 1)
		WEND
		RESULT = res
	FEND
	FUNCTION decode(str)
		DIM boin[] = "ぁ", "ぃ", "ぅ", "ぇ", "ぉ", "ァ", "ィ", "ゥ", "ェ", "ォ"
		DIM yoon[] = "ゃ", "ゅ", "ょ", "ャ", "ュ", "ョ"
		DIM sokuon[] = "っ", "ッ"
		DIM b[] = "ば", "び", "ぶ", "べ", "ぼ", "バ", "ビ", "ブ", "ベ", "ボ"
		DIM res = ""
		WHILE str <> ""
			DIM tmp = COPY(str, 1, 1)
			DIM s = COPY(str, 2, 1)
			IFB inArray(s, b) THEN
				start = 3
			ELSEIF inArray(s, boin) OR inArray(s, yoon) THEN
				start = 4
			ELSEIF inArray(tmp, sokuon) THEN
				start = 2
			ELSE
				start = 2
			ENDIF
			res = res + tmp + IIF(inArray(s, boin) OR inArray(s, yoon), s, "")
			str = COPY(str, start)
		WEND
		RESULT = res
	FEND
ENDMODULE

//////////////////////////////////////////////////
// 【引数】
//   expr : 評価する式 
//   truepart : 評価した式がTrueのときに返す値 
//   falsepart : 評価した式がFalseのときに返す値 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
	IFB EVAL(expr) THEN
		RESULT = truepart
	ELSE
		RESULT = falsepart
	ENDIF
FEND

//////////////////////////////////////////////////
// 【引数】
//   needle : 探す値 
//   haystack : 配列 
//   strict : 型も同じかチェックします 
// 【戻り値】
//   
//////////////////////////////////////////////////
FUNCTION inArray( needle, haystack[], strict = FALSE)
	DIM res = FALSE
	FOR item IN haystack
		IFB needle = item THEN
			IFB strict THEN
				IFB VARTYPE(needle) = VARTYPE(item) THEN
					res = TRUE
					BREAK
				ENDIF
			ELSE
				res = TRUE
				BREAK
			ENDIF
		ENDIF
	NEXT
	RESULT = res
FEND

解説

  1. 2行目
    UWSC
    	HASHTBL babigo
    日本語とバビ語を変換させるための連想配列。キーに文字を指定すると対応するバビ語に変換された文字列を返します。
  2. 3-19行目
    UWSC
    	PROCEDURE BABIGO()
    		DIM array[][1] = "あ,か,さ,た,な,は,ま,や,ら,わ,が,ざ,だ,ば,ぱ,ゃ,ぁ", "ば", _
    							"い,き,し,ち,に,ひ,み,り,ぎ,じ,ぢ,び,ぴ,ぃ", "び", _
    							"う,く,す,つ,ぬ,ふ,む,ゆ,る,ん,ぐ,ず,づ,ぶ,ぷ,ゅ,ぅ", "ぶ", _
    							"え,け,せ,て,ね,へ,め,れ,げ,ぜ,で,べ,ぺ,ぇ", "べ", _
    							"お,こ,そ,と,の,ほ,も,よ,ろ,ご,ぞ,ど,ぼ,ぽ,ょ,ぉ", "ぼ", _
    							"ア,カ,サ,タ,ナ,ハ,マ,ヤ,ラ,ワ,ガ,ザ,ダ,バ,パ,ャ,ァ", "バ", _
    							"イ,キ,シ,チ,ニ,ヒ,ミ,リ,ギ,ジ,ヂ,ビ,ピ,ィ", "ビ", _
    							"ウ,ク,ス,ツ,ヌ,フ,ム,ユ,ル,ン,グ,ズ,ヅ,ブ,プ,ュ,ゥ", "ブ", _
    							"エ,ケ,セ,テ,ネ,ヘ,メ,レ,ゲ,ゼ,デ,ベ,ペ,ェ", "ベ", _
    							"オ,コ,ソ,ト,ノ,ホ,モ,ヨ,ロ,ゴ,ゾ,ド,ボ,ポ,ョ,ォ", "ボ"
    		FOR i = 0 TO RESIZE(array)
    			FOR item IN SPLIT(array[i][0], ",")
    				babigo[item] = item + array[i][1]
    			NEXT
    		NEXT
    	FEND
    コンストラクタ。ひらがな・カタカナの文字とバビ語に対応した連想配列を作成します。arrayの二次元目が0の要素をカンマで分割しそれをキー、キーと二次元目が1の文字を結合した文字列を値として格納します。
    UWSC
    PRINT babigo["あ"]   // あば
    UWSC
    PRINT babigo["ゃ"]   // ゃば
    UWSC
    PRINT babigo["ぉ"]   // ぉぼ
  3. 20,40行目
    UWSC
    	FUNCTION encode(str)
    		…
    	FEND
    符号化処理を行います。
  4. 25行目
    UWSC
    		DIM res = ""
    符号化した結果を代入しておく変数resを宣言。
  5. 26行目
    UWSC
    		DIM tmp = ""
  6. 27,38行目
    UWSC
    		WHILE str <> ""
    			…
    		WEND
    先頭の文字から順番にバビ語の符号化処理を行う。
  7. 28行目
    UWSC
    			s = COPY(str, 2, 1)
    strの2文字目をsに代入。
  8. 29行目
    UWSC
    			len = IIF(inArray(s, boin) OR inArray(s, yoon), 2, 1)
    sboinyoonの配列のいずれかの文字に一致したら2,一致しなければ1をlenに代入。
  9. 30行目
    UWSC
    			tmp = COPY(str, 1, len)
    strの先頭からlen文字だけtmpに代入。
  10. 31,35行目
    UWSC
    			IFB LENGTH(tmp) = 1 THEN
    				…
    			ENDIF
    tmpが1文字ならば32行目>>>、1文字でなければ34行目>>>。1文字でないのは「きゃ」、「ふぁ」などの小さい文字がつくものです。
  11. 32行目
    UWSC
    				res = res + IIF(babigo[tmp, HASH_EXISTS], babigo[tmp], tmp)
    tmpの文字が連想配列に存在すればその値を取得、存在しなければtmpをそのままresに結合。
  12. 34行目
    UWSC
    				res = res + COPY(tmp, 1, 1) + babigo[COPY(tmp, 2, 1)]
    tmpの1文字目はそのまま、tmpの2文字目をバビ語に変換する。例えばtmpが「きゃ」ならば「き」はそのまま「ゃ」にバビ語で「ゃば」に変換し「きゃば」として返す。
  13. 41,63行目
    UWSC
    	FUNCTION decode(str)
    		…
    	FEND
    復号処理を行います。
  14. 46行目
    UWSC
    		DIM res = ""
    復号した結果を代入しておく変数resを宣言。
  15. 47,61行目
    UWSC
    		WHILE str <> ""
    			…
    		WEND
    先頭の文字から順番にバビ語の復号処理を行う。
  16. 48行目
    UWSC
    			DIM tmp = COPY(str, 1, 1)
    strの先頭から1文字をtmpに代入する。
  17. 49行目
    UWSC
    			DIM s = COPY(str, 2, 1)
    strの2文字目をsに代入する。
  18. 50-58行目
    UWSC
    			IFB inArray(s, b) THEN
    				start = 3
    			ELSEIF inArray(s, boin) OR inArray(s, yoon) THEN
    				start = 4
    			ELSEIF inArray(tmp, sokuon) THEN
    				start = 2
    			ELSE
    				start = 2
    			ENDIF
    sbに含まれていたら、startに3、sboinまたはyoonに含まれていたらstartに4、tmpsokuonに含まれているもしくはいずれの条件にも一致しなければ、startに2を代入する。
  19. 59行目
    UWSC
    			res = res + tmp + IIF(inArray(s, boin) OR inArray(s, yoon), s, "")
    バビ語からば行を除いた文字列を取得、結合する。
  20. 60行目
    UWSC
    			str = COPY(str, start)
    処理が終了した文字列を削除する。

バビ語とは

バビ語とは入れ詞いれことばの一種です。ルールは簡単で各文字の間に「ばびぶべぼ」を入れ、付け足す音は直前の母音と揃えるだけです。

  1. 「ありがとう」→「あ
  2. 「おはよう」→「お

より詳しく説明すると以下のような条件があります。

  1. 撥音はつおん(ん)の後は「ぶ」を付ける。
  2. 促音そくおん(っ)の後は何も付けない。
  3. 拗音ようおん(きゃ、きゅ、きょ等)は直前の言葉とセットにして、拗音の母音に対応するば行の文字を付ける。
  4. 長音ちょうおん(ー)の後は直前の言葉の母音。
  1. 「こんにちは」→「こ
  2. 「きって」→「きって
  3. 「きょう」→「きょ
  4. 「らーめん」→「ら

一覧表

上段のバビ語変換前の文字、下段がバビ語変換後の文字列です。バビ語で追加された"ば行"の文字を色付けしています。

あ段 い段 う段 え段 お段
あ行
か行
さ行
た行
な行
は行
ま行
や行
ら行
わ行
が行
ざ行
だ行
ば行
ぱ行
○ぁ行 ○ぁ ○ぃ ○ぅ ○ぇ ○ぉ
○ぁ ○ぃ ○ぅ ○ぇ ○ぉ
○ゃ行 ○ゃ ○ゅ ○ょ
○ゃ ○ゅ ○ょ

使い方

ひらがな・カタカナ以外の文字はそのまま出力されます。

以下はhttps://www.hinatazaka46.com/s/official/diary/detail/27193?ima=0000&cd=memberより引用させて頂きました。

UWSC
PRINT BABIGO.decode("はばちびまばいびめべのぼきょぼんぶこぼまばるぶまばるぶかばんぶがばえべまばしびたば♡")
結果
プレーンテキスト
はちまいめのきょんこまるまるかんがえました♡

参考文献

  1. https://youtu.be/6heq-Aaft6s
  2. https://www.hinatazaka46.com/s/official/diary/detail/27193?ima=0000&cd=member