壁ツェーン

オンギャーの思考回路

SKK の辞書ファイルを使ってまどそふとっぽい文字列をランダム生成する

暇すぎてこんなことをしています。いや卒論の作業やれよ。

この記事は Summer is over を聴きながら書いています。

発端

mstdn.maud.io

mstdn.maud.io

mstdn.maud.io

以上!

手段の検討

さて手軽にこれらの単語を得る手段には何があるだろう、と考えたときに真っ先に思い付いたのが 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 です。

のうせんミリバール
ねんばつエアポート
はんせいハリケーン ←反省してなさそう
もとかわバスルーム
ばんせいチャコール
おなさけウイザード
ふみひでハイボール
きょくしアルバータ
はいべんブリザード ←低俗すぎる
げんりずノクターン
せいどくレオノール 
みずくさレオタード ←どエッチ
ぎんむくフッサール
たぐうちヘアピース
あてびとマクリーン
くちかずルクソール
えずめんストリート
こめぐらオナホール ←????
しせいじメニエール
せいいくプラカード

生成 ~サンシャイン池崎編~

gnosia.info

gnosia.info

mstdn.maud.io

もうすでに自動化されていますが、せっかくなので自分でも試してみましょう。

地名辞書から二文字の地名を取り出す正規表現ですが、 ripgrep を使っているので \b\p{Han}[\p{Han}&&[^市区町村]]\b としました。 (ripgrep は RE2 ベースなので文字集合の集合演算ができる)

アトモスフィア美鈴
ロイコトリエン柿田
テクネチウム十郎
ピアノトリオ三咲
メイプルシロップ水江
シンクロナイズド起田
ワンクリック鉢地
エティエンヌ神木
サブプロセス塚崎
ロジスティクス興浜
コラムニスト森忠
メタフォント兵団
ダイナミズム北甲
グッドウィン船居
ツィンバロン平坪
スキンシップ川登
ペンテコステ沢下
エロティシズム田下
トラックパッド敷屋
テキストファイル堂原
メルカプタン西大
ハインライン徳島
ピグマリオン見合
アイアンマン碧海
クリスチャン好地
メチルアミン高光
フロッグマン蔵前
カザフスタン宝石
ダルタニャン秩父
サキソフォン柳堀
セバスチャン角取
オンブズマン田殿
プランクトン中合
フラクション味方
エストロゲン附船
チャップリン飛渡
アンドロゲン高栄
メルカプタン土場
ジャスティン萩倉
フロアプラン小滝

なんだこの微妙さ加減は……

感想

日本語として扱う場合、単純な文字数とは別にモーラ数の問題があるので、たとえば同じ 6 文字表記でも「ハイスペック」と「ハイジャック」はモーラ数が違うため口に出して読むとリズムに違和感があります。 厳密にやるならちゃんとプログラムを起こしてモーラ数で抜き出すようにするべきですね。 あと今回手抜きしてやってないひらがなのカタカナ化なども。まあこれは PHPmb_convert_kana() 関数が便利すぎるのでこれを使えば済む話ではありそうです。