Skip to main content

Soramimi (phonetic parody) lyrics generator — Python port of the Soramimic engine

Project description

soramimic

空耳(替え歌)歌詞を自動生成する Soramimic エンジンの Python ライブラリです。 本体( soramimic/soramimic の frontend/src/lib )の挙動互換移植で、同じ入力・同じ単語リストから本体と同じ空耳を生成します。

開発中(0.x)。API は変わる可能性があります。

インストール

pip install soramimic          # コア(トークナイザなし)
pip install "soramimic[mecab]" # fugashi + ipadic トークナイザ込み

使い方

from soramimic import create_soramimic, load_default_data
from soramimic.tokenizers.mecab import MeCabTokenizer  # 要 soramimic[mecab]

tok = MeCabTokenizer()
app = create_soramimic(
    **load_default_data(),  # 同梱の辞書データ(漢字読み・英語カナ・音類似度など)
    tokenize_sentenses=tok.tokenize,
    get_yomi=tok.get_yomi,
)

# 単語リスト: tidy CSV (soramimic-wordlists 形式) または1行1語のプレーンテキスト。
# 試しやすいようにサンプル(nations=国名, sekitsui=脊椎動物, stations=駅名)を同梱している
from soramimic import load_sample_wordlist

db = app.word_list.parse_tidy(load_sample_wordlist("nations"), "")  # 第2引数はwhere式

results = app.soramimi_maker.generate(["夜の街を駆け抜ける"], db, {})
for line in results:
    print(" / ".join(w["surface"] for w in line))
# => ヨルダン / マリ / オマーン / ペルー / ペルー

自前の単語リストを使う場合は同形式のCSVテキストを parse_tidy に渡します。 同梱サンプルは権利上の配慮から事実データ(国名・生物名・駅名)のみです。

トークナイザは差し替え可能です( soramimic.tokenizer.Tokenizer プロトコル参照)。 kuromoji.js 互換のトークン dict( surface_form / pronunciation / pos …、未知語は "*" )を返せば何でも使えます。 事前にトークナイズ済みの入力からは generate_from_tokens() で生成できます(固定区間 locks による部分再生成にも対応)。

本体JSとの互換性

  • モジュールは本体 frontend/src/lib の各JSファイルと1:1対応です( kanaToSyllable.jskana_to_syllable.py など)。
  • 互換性はゴールデンテストで担保しています。tools/generate_golden.mjs が本体JSを Node で直接実行して期待出力( tests/golden/*.json )を生成し、pytest で Python 出力との完全一致を検証します。本体更新への追従時は次で再生成してください:
node tools/generate_golden.mjs <soramimicリポジトリのルート> tests/golden
uv run pytest tests/test_golden.py
  • JS実装の癖(オブジェクトのキー列挙順、共有ミューテーション、既知の細かなバグを含む)も出力互換のため忠実に再現しています。詳細は各モジュールのコメント参照。

開発

uv sync --all-extras
uv run pytest
uv run ruff check .

License

MIT。同梱の英語発音データ( english-kana.json )は CMUdict 由来です( src/soramimic/data/english-kana.LICENSE 参照)。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

soramimic-0.1.1.tar.gz (1.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

soramimic-0.1.1-py3-none-any.whl (1.9 MB view details)

Uploaded Python 3

File details

Details for the file soramimic-0.1.1.tar.gz.

File metadata

  • Download URL: soramimic-0.1.1.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for soramimic-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ba06d407e11bdcbf6692bd715aad7781a85dbe3579fc93cb927020bb3ed297a7
MD5 f2e02c70348f534b7601e4b1bb270ef4
BLAKE2b-256 1ae87fa964ea2fda0bb6398139879f7463de0593b91c1a97c04a142776d4a9f8

See more details on using hashes here.

File details

Details for the file soramimic-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: soramimic-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 1.9 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for soramimic-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5bce73c56142b0621e809f7e17ebe1af39fe283516f3b5674c6690e03178b31d
MD5 28a0212c316f4805cb67986a41ec735f
BLAKE2b-256 52c11654ce7d8bd4e51bfa97553aaa4c043ce2928260148b54836109e19499f2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page