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語のプレーンテキスト
csv = """id,original,surface,pronunciation
1,ヨーグルト,ヨーグルト,ヨーグルト
2,ケーキ,ケーキ,ケーキ
3,カケル,カケル,カケル
4,ヨル,ヨル,ヨル
5,マチ,マチ,マチ
6,オー,オー,オー
"""
db = app.word_list.parse_tidy(csv, "")  # 第2引数はwhere式 (例: "category = food")

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

トークナイザは差し替え可能です( 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.0.tar.gz (1.2 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.0-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: soramimic-0.1.0.tar.gz
  • Upload date:
  • Size: 1.2 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.0.tar.gz
Algorithm Hash digest
SHA256 241099bb2e5df18f89877f65654686175e7da6dd9d83cc518b7299436a3a32ad
MD5 da854b9416f76550ee9669f9b80089b8
BLAKE2b-256 da921ea595e534cca7a898da12614dbb4f561f85684f218a13ef03541a817c0f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: soramimic-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 1.2 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1dbbae30e6e13b96d3e0771f938351cad7aa4feddfc528f3d97202c710715a2e
MD5 b4fe43278ae949d61b5373898d222fb5
BLAKE2b-256 10ad105ef5407de79d267ea0330f067ae718dc25283624c3ad4ec5166c8c374c

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