テキストを壱百満天原サロメお嬢様文体に変換するコマンドを書いた
壱百満天原サロメお嬢様の配信を見ていたら、 普通のテキストを壱百満天原サロメお嬢様の文体にプログラムで変換できるのでは?とか思ったので作ってみた。
Web 版
Web 版として ojosama-web も作った。 インストール不要で使えるようにしたかったので。
最初は Heroku の無料枠で動かしていた。 Heroku のデプロイ方法を調べながら手探りで作成して Web 版は 4 時間程度で完成した。 DB や認証がないので割と簡単だった。 やってることもテキストの変換のみだし。 クロスブラウザ対応はしておらず、Chrome でしか動作確認もしていない。
Web 版のリリース後、少ししたら Heroku の無料枠が廃止されることになった。
そのため、サイトのホスティング場所を Heroku からプライベートの AWS アカウントに変更した。
画面はペライチの HTML を CloudFront + S3 で配信している。 ドメイン管理は Route 53 に変更した。 変換処理は API Gateway + Lambda で API として公開しており、画面からはこの API を呼び出して変換処理をしている。 デプロイは GitHub リポジトリへの Push をトリガーに CodePipeline + CodeBuild を実行してもろもろデプロイする構成にした。
ドメイン料金以外は無料枠に収まっているので、コストはほぼ 0 円で済んでいる。
ojosama のパッケージ構成
今回はライブラリとしても使えるようなパッケージ構成にした。
- リポジトリ直下は
ojosama
パッケージ - mainパッケージは
cmd/ojosama
配下
ojosama-web もライブラリとしての ojosama を使用している。
実装
実装としては形態素解析ライブラリの kagome をお借りして、 品詞と読みと、前後の単語を泥臭く判定して変換している。
単純な置換は、今回やりたいケースとはマッチしない。 例えば「する」を「いたします」に単純置換すると、以下のケースでおかしな文になる。
- 再現するアルゴリズム→再現いたしますアルゴリズム
お嬢様的な言い回しだと「再現いたしますわ。」といった文の終わりのタイミングでだけ「いたします」を使うほうが日本語的に自然になる。 つまり、前後の品詞の有無も合わせて変換しないと、違和感のある文になる。
また、壱百満天原サロメお嬢様固有の変換ルールも設けている。
壱百満天原サロメお嬢様の配信を聞いていると、よく「〇〇ですわ~~!!!」という発言をする。 あといろんなものに「お」を付ける。 例としては「おハーブですわ~~!!!」などがある。 このあたりの特徴的な言い回しも変換に取り入れた。 「まさしくお嬢様」ではなく「壱百満天原サロメお嬢様」な文体になるのを意識している。
余談
形態素解析ライブラリを使うのは 2 回目
実は形態素解析ライブラリを使うのはこれが初めてではない。 だいぶ昔に Java 製の形態素解析ライブラリの kuromoji を使ってプログラムを書いたことがある。 品詞や読みを指定して文字列を置換するコマンドを作った - Qiitaという記事も書いた。 その時もめちゃくちゃ苦戦した。
二次創作による創作元への配慮
コマンド名を salome
にするか ojosama
にするかは公開する直前まで悩んだ。
本人と関係ない人が二次創作で作ったツールを salome
として公開すると、Google の検索に載ってしまって検索妨害になってしまう懸念があった。
そのため、いきなりは壱百満天原サロメお嬢様と結びつかないように ojosama
にした。
普段作ってるツールはだいたい好き勝手に思いついたものを 0 から作ってるので、このあたりを気にしなくて良い。 しかし、今回は二次創作なので、創作元の方の迷惑にならないように最大限配慮しないといけない。 そのためANYCOLOR二次創作ガイドラインを熟読して、それにそれに従っている。
当然、変換ルールも壱百満天原サロメお嬢様をなるべく再現するものに留めている。 また、壱百満天原サロメお嬢様のイメージを損なうような逸脱したものにはしない。
ガイドラインに従うから、というのもあるけれど、 それ以上に僕も壱百満天原サロメお嬢様のサロメイト(ファン)の一人なので、 壱百満天原サロメお嬢様が嫌がるような創作物にしたくない。
窓の杜
なぜか若干バズって窓の杜で取り上げられた。
記事に取り上げられるのは初めてだが、こういうのは事前に連絡とか来ないらしい。
派生プロジェクト
実行可能ファイル、Web 画面、API と 3 つの実行環境を提供した関係でか、何故か派生プロジェクトが生まれた。
- DiscordBot: https://github.com/wgdp/ojosama-discord-bot
- Git のコミットメッセージをお嬢様にする CLI: https://github.com/Sigumaa/ojosama-commit
- 任意のテキストや、開いてるバッファ上のテキストをお嬢様にする Vim プラグイン: https://github.com/heavenshell/vim-ojosama
- FF 14 の Mod: https://www.nexusmods.com/finalfantasy7remake/mods/1043
何があるか分からんもんだなぁ。
2 つは API 経由で操作してるっぽいので、CLI を公開したあとすぐに API も公開したのが良かったのかもしれない。 API があれば実装に必要な言語を問わないしね。
以上。
前の記事 ドキドキ文芸部プラス!のシークレット 10 を取得するための VBScript を書いた | 次の記事 グリザイユ画法で絵を描いてみた