SKK の辞書ファイルを使ってまどそふとっぽい文字列をランダム生成する
暇すぎてこんなことをしています。いや卒論の作業やれよ。
この記事は Summer is over を聴きながら書いています。
発端
以上!
手段の検討
さて手軽にこれらの単語を得る手段には何があるだろう、と考えたときに真っ先に思い付いたのが SKK の辞書ファイルです。 SKK の辞書ファイルというのは比較的シンプルな構造になっていて、先頭に読み(と送り仮名の子音)、続けて単語ごとにスラッシュ区切りで変換候補がずらっと並ぶ形になっています。
; 送り仮名は入力に応じて自動で送り出される はみだs /はみ出/食み出/ ; 送り仮名がない場合は単語がそのまま載っている わがまま /我儘/我侭/
また、SKK には入力する際にスラッシュに続けて ASCII 文字を入力して別の単語を入力する、 abbrev という機能が存在します。
名前の通り、本来は略語などを登録したりできるのですが、SKK-JISYO.edict
という辞書ファイルを導入することで「英単語を入力してその和訳やカタカナ表記に変換する」ということが可能になります。
creative /クリエイティブ/ highspec /ハイスペック/ stream /ストリーム/河水/
いかにも *nix コマンド群で扱いやすそうですね。これを使うことにしましょう。
生成 ~まどそふと編~
ワガママハイスペック系列
比較的簡単そうなワガハイ風文字列の生成からやってみましょう。日本語で 4 文字の名詞は問題ないですね。 英単語カタカナ表記は……モーラ揺れを考慮して 6~8 文字で拾うことにしましょうか。 ripgrep で楽をします:
$ rg -No '^\p{Hiragana}{4}\b' SKK-JISYO.L | tee hiragana-4.txt あいあい あいいく あいいそ あいいろ あいいん あいうち あいうら あいえき あいえん あいおい ...
いまこれ書いてて気付いたんですが、"ハイスペック"は edict には収録されていないんですね……
$ rg -N '^[a-z\-]+\b' SKK-JISYO.* | rg -No '\b\p{Katakana}{6,8}\b' | tee english-6.txt アビリンピック アクチニウム アカデミック アカデミシャン アカデミシズム アカデミズム アチェレランド アクセプタンス アクセッシング アクシデント ...
あとはシャッフルして連結するだけです。
$ echo (shuf hiragana-4.txt | head -n 1)(shuf english-6.txt | head -n 1) ふとももチェックアウト
Tissue か?
特にワガママっぽい単語を選択しようと思うと後方参照が必要になります。まあ --pcre2
オプションがあるのでなんとかなりますね。
$ rg -No --pcre2 '^\p{Hiragana}{2}(\p{Hiragana})\1\b' SKK-JISYO.L | tee hiragana-4rep.txt あかしし あわいい いのしし いのまま いんかか うちばば うちもも うできき おおまま おおもも おにはは ...
$ echo (shuf hiragana-4rep.txt | head -n 1)(shuf english-6.txt | head -n 1) せきららアプリコット
おおそれっぽいな……そうか、後半に促音が含まれるものだけを抽出するというのもありですね。
$ echo (shuf hiragana-4rep.txt | head -n 1)(grep 'ッ' english-6.txt | shuf | head -n 1) わがままドグマチック
惜しい!
$ echo (shuf hiragana-4rep.txt | head -n 1)(grep 'ッ' english-6.txt | shuf | head -n 1) かんななハイジャック
物騒だな!
$ echo (shuf hiragana-4rep.txt | head -n 1)(grep 'ッ' english-6.txt | shuf | head -n 1) うちももカスタネット
ニッチ性癖 AV っぽいな!
ハミダシクリエイティブ系列
「ハミダシ」、まあ「はみ出す」というように活用があるのでちょっと面倒ですね。でもなんとかします。
$ rg -No '^\p{Hiragana}{3}s' SKK-JISYO.L | sed -E 's/s/し/' | tee hiragana-4shi.txt わりだし わびしし わけなし わきでし わきだし りようし りょうし りゃくし りかいし よりだし ...
どちらかというと問題は「クリエイティブ」側です。-tive のカタカナ読み収録数がまあ少ないこと。
$ cat SKK-JISYO.* | rg -No --no-filename '\p{Katakana}{3,7}ティブ' | tee english-3tive.txt アトラクティブ コラボレイティブ エフェクティブ エグゼクティブ インセンティブ イニシアティブ インタラクティブ インテラクティブ インタプリティブ スペクティブ
だいぶ妥協しましたがこれでも 46 エントリしか出てきませんでした。まあクリエイティブは入っていたのでよしとしましょう。
$ echo (shuf hiragana-4shi.txt | head -n 1)(shuf english-3tive.txt | head -n 1) ひれふしオルタナティブ
めんどくさくなってきたので一気に大量に生成しましょう。 join
コマンドを使えよというツッコミはなしの方向で。
$ for i in (seq 10); echo (shuf hiragana-4shi.txt | head -n 1)(shuf english-3tive.txt | head -n 1); end たのもしデリバティブ おためしクリエイティブ てばやしエグゼクティブ ねなおしイニシアティブ ゆどおしアトラクティブ きゅうしエフェクティブ けだかしプリミティブ しようしテンタティブ ふりだしエクゼクティブ たばなしデリバティブ
ナマイキデレーション・ヤキモチストリーム系列
こちらは正規表現と結果だけ提示します。あといくつか感想。
まずナマイキデレーション系列。デレーションみたいなのを生成するのは面倒だったのでやってません。
正規表現は \b[\p{Katakana}ー]{4}[ェャュョ]ン\b'
です。
しちせいバケーション ばくせいフォーチュン くるぶしクラクション ←どんな姿勢で運転してるんだよ とつほうクリスチャン そえがきコレクション ←マニアっぽい てっきょリカージョン とうがんイルージョン おどりばハイビジョン たけざきクリスチャン せいようクエスチョン てっきょセレクション あるいはリアクション こりごりテレビジョン つくよみセバスチャン ひつうちオキシジェン にゅうのヴァージョン せんみつコレクション おくさまテレビジョン ←金持ちっぽい なりよしエレクション しべりあファッション ←これは普通に好き
長音含まれてるやつ。
くろかみオークション ←猟奇的でなんかやだ はちあげフォーチュン ほんげつドネーション やつだまナレーション つうがくバケーション ←楽しそう せいおうハレーション ちのうかフュージョン きくずれオベーション そではばナレーション さわたりイルージョン なぞかけステーション ←ねづっちが MC やってそうな番組タイトルにありそう あきまでフュージョン なかうまエモーション へんさいナレーション じゅなんイルージョン たいろうヴァージョン えいきちエモーション しぜんがリカージョン もじぐんオークション かんかくヴァージョン ←ちゃんと semver しろ
次にヤキモチストリーム系列。正規表現は \b\p{Katakana}{3}ー\p{Katakana}\b
です。
のうせんミリバール ねんばつエアポート はんせいハリケーン ←反省してなさそう もとかわバスルーム ばんせいチャコール おなさけウイザード ふみひでハイボール きょくしアルバータ はいべんブリザード ←低俗すぎる げんりずノクターン せいどくレオノール みずくさレオタード ←どエッチ ぎんむくフッサール たぐうちヘアピース あてびとマクリーン くちかずルクソール えずめんストリート こめぐらオナホール ←???? しせいじメニエール せいいくプラカード
生成 ~サンシャイン池崎編~
もうすでに自動化されていますが、せっかくなので自分でも試してみましょう。
地名辞書から二文字の地名を取り出す正規表現ですが、 ripgrep を使っているので \b\p{Han}[\p{Han}&&[^市区町村]]\b
としました。
(ripgrep は RE2 ベースなので文字集合の集合演算ができる)
アトモスフィア美鈴 ロイコトリエン柿田 テクネチウム十郎 ピアノトリオ三咲 メイプルシロップ水江 シンクロナイズド起田 ワンクリック鉢地 エティエンヌ神木 サブプロセス塚崎 ロジスティクス興浜 コラムニスト森忠 メタフォント兵団 ダイナミズム北甲 グッドウィン船居 ツィンバロン平坪 スキンシップ川登 ペンテコステ沢下 エロティシズム田下 トラックパッド敷屋 テキストファイル堂原
メルカプタン西大 ハインライン徳島 ピグマリオン見合 アイアンマン碧海 クリスチャン好地 メチルアミン高光 フロッグマン蔵前 カザフスタン宝石 ダルタニャン秩父 サキソフォン柳堀 セバスチャン角取 オンブズマン田殿 プランクトン中合 フラクション味方 エストロゲン附船 チャップリン飛渡 アンドロゲン高栄 メルカプタン土場 ジャスティン萩倉 フロアプラン小滝
なんだこの微妙さ加減は……
感想
日本語として扱う場合、単純な文字数とは別にモーラ数の問題があるので、たとえば同じ 6 文字表記でも「ハイスペック」と「ハイジャック」はモーラ数が違うため口に出して読むとリズムに違和感があります。
厳密にやるならちゃんとプログラムを起こしてモーラ数で抜き出すようにするべきですね。
あと今回手抜きしてやってないひらがなのカタカナ化なども。まあこれは PHP の mb_convert_kana()
関数が便利すぎるのでこれを使えば済む話ではありそうです。