Coder Social home page Coder Social logo

jiro4989 / ojosama Goto Github PK

View Code? Open in Web Editor NEW
381.0 3.0 11.0 373 KB

テキストを壱百満天原サロメお嬢様風の口調に変換します

Go 98.68% Makefile 0.46% Shell 0.86%
cli go joke kagome morphological-analysis hyakumantenbara-salome

ojosama's Introduction

ojosama

test codecov

テキストを壱百満天原サロメお嬢様風の口調に変換して出力します。

demo

1. 概要

任意のテキストを壱百満天原サロメお嬢様風の口調風に変換する非公式プログラムです。 コマンドラインとライブラリの2つの方法で使えます。

壱百満天原サロメお嬢様風の口調変換の例を以下に示します。

変換前 変換後

〇〇をプレイする

〇〇をプレイいたしますわ

ビデオテープはどこで使うんですか

おビデオテープはどちらで使うんですの

汚いです!

きったねぇですわ~~!!!

わたしも使ってました

わたくしも使っておりましたわ

文の区切れ目や、文の変換結果の終端で「わ!」あるいは「わ?」で終わる場合は、 ランダムで「~」と「!」または「?」を追加します。 「~」「!」「?」の数は0~3個のいずれかになります。

変換前 変換後

ハーブです!

おハーブですわ~~!!!

ハーブです?

おハーブですわ~~???

変換では、単語の品詞や読み、特定の単語の前後にある単語、 特定の単語の連続などの変換ルールを順番に評価して変換しています。

文章に対して形態素解析を行っており、 形態素解析ライブラリの kagome を使用しています。

2. 壱百満天原サロメお嬢様について

本当のお嬢様に憧れる一般女性です。 麗しいお姿と独特な言葉選びと高貴なお声 が魅力的な圧倒的お嬢様です。

毎回約1時間前後の枠で配信するスタイルなので、翌日が仕事の人にも視聴しやすいです。 また、配信冒頭に前回のあらすじを話してくださるため、 途中から配信を見始めた方も内容についていけるように配慮してくださっています。

サロメイトにも、そうでない方にも等しく配慮をしてくださる高貴なお嬢様であるため ぜひ、まだ配信を見たことの無い方も配信を視聴してみてください。

詳細は以下リンクをご参照ください。

3. 使い方

3.1. Web

Web版提供してます。特にツールのインストールは不要です。

Web版のソースコードは以下です。

3.2. コマンド

ワンライナーでテキストを変換する場合は、以下のように実行します。

$ ojosama -t ハーブがありました!
おハーブがありましたわ~!!

# 標準入力
$ echo ハーブがありました! | ojosama
おハーブがありましたわ~!!

テキストファイルをまるごと変換する場合は、以下のように実行します。

$ ojosama README.adoc

ファイルの文字コードを指定する場合は -charcode オプションを指定します。 現状 sjisutf8 のみサポートしています。(デフォルトでは utf8

$ ojosama -charcode sjis testdata/sample1_sjis.txt

3.3. ライブラリ

Goのコードとして使う場合は以下のように使用します。

一部変換ロジックの中でランダムな選択を行うため、乱数のシード値を設定します。

package main

import (
	"fmt"
	"math/rand"
	"time"

	"github.com/jiro4989/ojosama"
)

func main() {
	rand.Seed(time.Now().UnixNano())

	s := "ハーブがありました!"
	text, err := ojosama.Convert(s, nil)
	if err != nil {
		panic(err)
	}
	fmt.Println(text)
}

4. インストール

Releasesから実行可能ファイルをダウンロードしてください。

あるいは以下のコマンドでインストールしてください。

$ go install github.com/jiro4989/ojosama/cmd/ojosama@latest

4.1. タブ補完の有効化

4.1.1. Bash

bash-completion がインストール済みであれば、 以下のコマンドでタブ補完を使えるようになります。

$ ojosama -completions bash | sudo tee /usr/share/bash-completion/completions/ojosama

4.1.2. Zsh

$ ojosama -completions zsh | sudo tee /usr/share/zsh/functions/Completion/_ojosama

4.1.3. Fish

$ ojosama -completions fish | tee $HOME/.config/fish/completions/ojosama.fish

5. 注意事項

5.1. 変換結果について

まだまだ実装途中なので、怪しい変換をする場合があります。

必ずしも、自分のイメージしているお嬢様の口調になっているとは限らないことをご了承ください。

5.2. プログラムの使用について

壱百満天原サロメお嬢様、及びその所属の にじさんじ や、 その関係者、ファンコミュニティの方の迷惑にならないように使ってください。

本プログラムは、にじさんじ所属の壱百満天原サロメお嬢様のキャラクターを題材にした二次創作の一つです。 故に、本プログラムは以下二次創作ガイドラインに従います。

本プログラムを使う場合も上記ガイドラインを守ってお使いください。

6. 既知のバグ

変換済みの文を更に変換すると変になります。

$ ojosama -t お願いします | ojosama
お願いいたしますわですわ

7. 派生プロジェクト

派生したプロジェクトのリンクです。多謝。

説明 言語 リポジトリURL

スラッシュコマンドでお嬢様に変換できるDiscordBot

Go

https://github.com/wgdp/ojosama-discord-bot

Gitのコミットメッセージをお嬢様にするCLI

Rust

https://github.com/Sigumaa/ojosama-commit

任意のテキストや、開いてるバッファ上のテキストをお嬢様にするVimプラグイン

Vim Script

https://github.com/heavenshell/vim-ojosama

スラッシュコマンドでお嬢様に変換できるSlack App

Go

https://github.com/yoskeoka/ojosama-slack-app

8. 開発者向け

8.1. 開発環境

  • Go 1.18.2

  • Ubuntu 22.04 on Docker

  • make (なくてもいい)

8.2. ビルド

以下のコマンドでビルドします。 実行すると内部で単体テストも実施されるので、とりあえずこれがパスすればOK。

$ make
$ ls -lah ./bin/ojosama

8.3. リリース

git tag打ったらCIが走って自動でリリースする。

8.4. 絵文字プレフィックス

コミットメッセージにはなるべく絵文字プレフィックスを付けるようにします。 ただし忘れてもOKです。 使う絵文字は大体以下。

絵文字 GitHub上のマーク 使うタイミング

:sparkles:

新機能、変換ルールの追加

🐛

:bug:

バグ修正

💯

:100:

リファクタリング

💚

:green_heart:

テスト、CI系

📝

:memo:

ドキュメント系

ojosama's People

Contributors

dependabot[bot] avatar github-actions[bot] avatar jiro4989 avatar johnmanjiro13 avatar matsuyoshi30 avatar michimani avatar xztaityozx avatar yoskeoka avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ojosama's Issues

二人称の変換ルールを追加する

変換前 変換後
あなた 貴方
あんた 貴方
おまえ 貴方
お前 貴方
てめぇ 貴方
てめえ 貴方
おめー 貴方
貴様 貴方
きさま 貴方
そなた 貴方
貴方

笑いの表現を「おほほ」に変換する

ネットスラングを含む、笑いの表現を「おほ+」に変換する。

  • あはは
  • ははは
  • うふふ
  • えへへ
  • いひひ
  • げへへ
  • ぐふふ
  • にしし
  • へへへ

笑いのネットスラングにはいくつかバリエーションがある。

  • (笑)
  • www

これらの表現を「おほ+」に変換する方法を考える。

「おハーブですわ~~!!!」にするか否か

「草」を「おハーブですわ~~!!!」にするかどうかは悩む。

配信を拝聴している限り、ハーブを見つけた時に「おハーブですわ~~!!!」とおっしゃっている。
あとは配信内で「おほほ」と短く感動を表現されていた。

どちらかというと「おハーブですわ~~!!!」は
サロメイトが「草」のお嬢様表現としての言い回しのようにも感じる。

基本的に壱百満天原サロメお嬢様の言い回しに近い変換を目指すので
「草」を「おハーブですわ~~!!!」に変換するのは適当ではないのではないかもしれない。

「お」が付きすぎる

もう少し実際の話し方を拝聴して、どういう単語に「お」を付ける傾向があるのか分析が必要そう

「。」をランダムで「!」とかに置き換える

ハイテンションさを表現できるようにしたい。
現状、元の文に!や?がある時にそれをトリガーに強調するような処理を入れた。

ネットの記事とかだと!とか?とかはあんまり多用しないで、淡々とした文章で書かれることは多いので
こういう文も強制的にお嬢様な感じにしていきたい

「お腹」が二重丁寧語になる

「お腹が空きました」が「おお腹が空きましたですわ」に変換されますわ。お墓やお姉さま、お言葉などは余計な「お」が付きませんでしたわ。

image

トークン進行方法の改善

現状forループとループ変数を色んな関数に引き回している。

関数が前後のトークンを必要とする場合はループ変数とトークンを必要とし、関数内で位置を進めたりしている。

正直実装が分かりづらいし、汚いし、似たようなコードが色んなとこに散らばっていて良くない。

もっと良い実装にできないか考える

半角の!や?も扱うようにする

現状、!のときに~~!!をつけたりするけれど、半角の ! のときは付けていない。
?の場合も同様。やる。

おまけ程度で、!のときは ❗ とかの絵文字のビックリマークを混ぜる機能も付けたい

!が出現したときに ❗ などの絵文字に変換する

‼️‼️‼️‼️とか ❗ 要素がやはり欲しいので、ランダムに絵文字に変換したい、が。
その場合その後ろに続くやつをどうするかが問題になる。

「バナナはおやつです!!!」とかを変換したときに「おバナナはおやつですわ❗!!」とかになる可能性がある。
つまり、絵文字に変換したあとはその後ろの文字列も合わせて変換しないとおかしくなる。

❗ を採用したら?も❓ に変換してしかるべき

変な変換

気づいたものをひらすら加筆して修正する

  • 2022年7月5日 -> 2022年7お月5日
  • を発表した。 -> 発表したわ!
  • 成果だとされており -> お成果ですのとされており
  • 効率的に -> お効率的に
  • 発揮するという。 -> 変化せず
  • ~~ができるため -> 変化せず
  • 1つである -> 変化せず
  • 緊急事態宣言 -> 緊急お事態宣言
  • 注目されました -> 注目されおりました

終助詞を使用した文章

例文は以下。

  • 野球しようぜ
    • しよ/動詞,自立/する
    • う/助動詞/う
    • ぜ/助詞,終助詞/ぜ
  • 野球やろうよ
    • やろ/動詞,自立/やる
    • う/助動詞/う
    • よ/助詞,終助詞/よ
  • 野球やるか
    • やる/動詞,自立/やる
    • う/助動詞/う
    • か/助詞,副助詞、並立助詞、終助詞/か
  • 野球やるな
    • やる/動詞,自立/やる
    • な/助詞,終助詞/な
  • 野球すんな
    • すん/動詞,自立/する
    • な/助詞,終助詞/な
  • 野球するぞ
    • する/動詞,自立/する
    • ぞ/助詞,終助詞/ぞ
  • 野球やるべ
    • やる/動詞,自立/やる
    • べ/助詞,終助詞/べ

終助詞の定義は以下。

助詞の種類の一。種々の語に付き、文の終わりにあってその文を完結させ、希望・禁止・詠嘆・感動・強などの意を添える助詞。現代語では、「か(かい)」「かしら」「な」「ぞ」「ぜ」「とも」「の」「わ」「や」など。古語では「か(かな)」「てしか(てしかな)」「にしか(にしかな)」「もが(もがな)」「かし」「な」「そ」「なむ」「ばや」など。

コトバンクより引用。

こういった終助詞の絡む文は組み合わせが多彩なので、読み決め打ちのルールで実現するには難しい。
大量のルールが必要になるし、おそらく漏れが発生する。

品詞の法則性を特定して、そのパターンで文を変換するようにしたい。

お嬢様らしい文の終わり方を追加する

終わり方など

  • ~まして
  • ~ましてよ
  • ~ございますわ
  • ~かしら(疑問系)

文の終わり

以下が文の終わり。

  • 入力文字列の終端
  • 動詞文(例:私はカレーを作る)
    • 動詞+終助詞
      • 終助詞が来た時は文の終わり
    • 動詞+(。|!|?)
      • 動詞単独の場合、文の終わりかどうか判定できないため、句点や感嘆符が来た時に文の終わりと判断する
      • 「勉強する前に手を洗おう」の「勉強する」を「勉強いたしますわ」とかに変換してはいけない
    • 名詞+(する|やる)(+助動詞)+終助詞 #17
      • 野球しようぜ、野球すんな、など
    • 名詞+(した|やった)+終助詞 #53
      • バスケしたぜ、など
      • 「食事した後は歯を磨こう」の「食事した」を「食事いたしましたわ」とかに変換してはいけない
  • 形容詞文(例:幽霊が恐ろしい)
    • 形容詞+(。|!|?) #68
    • 形容詞+終助詞
      • 汚いね、怖いよ、楽しいな、騒がしいぞ、など
  • 名詞文(例:彼はシェル芸人だ)
    • 名詞+(だ|である)+(。|!|?)
      • 彼は役者だ、彼女は医師である、など

過去形に対応する

「〇〇する」は対応したので、「〇〇した」に対応する。

  • 野球した
    • 野球 名詞,一般 野球
    • し 動詞,自立 する
    • た 助動詞 た
  • 野球やった
    • 野球 名詞,一般 野球
    • やっ 動詞,自立 やる
    • た 助動詞 た

乱数の初期化をしないようにする

現状パッケージを呼び出したときに自動で乱数のシード値が設定されるようになっている。

https://github.com/jiro4989/ojosama/blob/81519582f901d03cb66845fd95c6a3dd59e192f9/ojosama.go

これだとパッケージをimportするだけでパッケージ呼び出し側に副作用が発生してしまう。
ライブラリ的にこれはよろしくないので、呼び出し側で制御できるようにする。

方法は2種類考えられる。

  1. シード値の設定をそもそもしない。呼び出し側に委ねる
  2. オプションパラメータでシード値の設定を無効化する

1はライブラリ的に自然できれいなアプローチになるが、破壊的変更になってしまう。
2は非破壊的変更だが、ライブラリを使う側はオプションパラメータの存在を知っていないと制御できない。

まぁジョークライブラリなので 1 のアプローチを取りつつマイナーバージョンアップで良いのでは。
(メジャーバージョンアップをするとパッケージを v2 パスに変更しないといけなくて、ライブラリを使う側の修正も発生して面倒くさい。本来であれば破壊的変更の場合はメジャーバージョンアップをするのが適当だけれど、このライブラリの利用用途的にそこまで厳密でなくても良いのでは)

パイプ対応

おパイプに対応していただければ、おコマンドのお用途が広がりますわ。

ojichat 'サロメ' | ojosama

Go 1.19のテストを追加

たしか go fmt がコケてたので、一旦 1.19 のテストを止めた。
フォーマット処理が変更になったのかな

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.