soramimic 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,94 @@
1
+ Metadata-Version: 2.4
2
+ Name: soramimic
3
+ Version: 0.1.0
4
+ Summary: Soramimi (phonetic parody) lyrics generator — Python port of the Soramimic engine
5
+ Keywords: soramimi,japanese,lyrics,phonetics,nlp
6
+ Author: Jiro Shimaya
7
+ License-Expression: MIT
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Classifier: Natural Language :: Japanese
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Topic :: Text Processing :: Linguistic
16
+ Requires-Dist: fugashi>=1.3 ; extra == 'mecab'
17
+ Requires-Dist: ipadic>=1.0 ; extra == 'mecab'
18
+ Requires-Python: >=3.10
19
+ Project-URL: Issues, https://github.com/soramimic/soramimic-python/issues
20
+ Project-URL: Repository, https://github.com/soramimic/soramimic-python
21
+ Provides-Extra: mecab
22
+ Description-Content-Type: text/markdown
23
+
24
+ # soramimic
25
+
26
+ 空耳(替え歌)歌詞を自動生成する [Soramimic](https://soramimic.com) エンジンの Python ライブラリです。
27
+ 本体( soramimic/soramimic の `frontend/src/lib` )の**挙動互換移植**で、同じ入力・同じ単語リストから本体と同じ空耳を生成します。
28
+
29
+ > 開発中(0.x)。API は変わる可能性があります。
30
+
31
+ ## インストール
32
+
33
+ ```bash
34
+ pip install soramimic # コア(トークナイザなし)
35
+ pip install "soramimic[mecab]" # fugashi + ipadic トークナイザ込み
36
+ ```
37
+
38
+ ## 使い方
39
+
40
+ ```python
41
+ from soramimic import create_soramimic, load_default_data
42
+ from soramimic.tokenizers.mecab import MeCabTokenizer # 要 soramimic[mecab]
43
+
44
+ tok = MeCabTokenizer()
45
+ app = create_soramimic(
46
+ **load_default_data(), # 同梱の辞書データ(漢字読み・英語カナ・音類似度など)
47
+ tokenize_sentenses=tok.tokenize,
48
+ get_yomi=tok.get_yomi,
49
+ )
50
+
51
+ # 単語リスト: tidy CSV (soramimic-wordlists 形式) または1行1語のプレーンテキスト
52
+ csv = """id,original,surface,pronunciation
53
+ 1,ヨーグルト,ヨーグルト,ヨーグルト
54
+ 2,ケーキ,ケーキ,ケーキ
55
+ 3,カケル,カケル,カケル
56
+ 4,ヨル,ヨル,ヨル
57
+ 5,マチ,マチ,マチ
58
+ 6,オー,オー,オー
59
+ """
60
+ db = app.word_list.parse_tidy(csv, "") # 第2引数はwhere式 (例: "category = food")
61
+
62
+ results = app.soramimi_maker.generate(["夜の街を駆け抜ける"], db, {})
63
+ for line in results:
64
+ print(" / ".join(w["surface"] for w in line))
65
+ # => ヨル / オー / マチ / オー / カケル / ケーキ
66
+ ```
67
+
68
+ トークナイザは差し替え可能です( `soramimic.tokenizer.Tokenizer` プロトコル参照)。
69
+ kuromoji.js 互換のトークン dict( `surface_form` / `pronunciation` / `pos` …、未知語は `"*"` )を返せば何でも使えます。
70
+ 事前にトークナイズ済みの入力からは `generate_from_tokens()` で生成できます(固定区間 `locks` による部分再生成にも対応)。
71
+
72
+ ## 本体JSとの互換性
73
+
74
+ - モジュールは本体 `frontend/src/lib` の各JSファイルと1:1対応です( `kanaToSyllable.js` → `kana_to_syllable.py` など)。
75
+ - 互換性は**ゴールデンテスト**で担保しています。`tools/generate_golden.mjs` が本体JSを Node で直接実行して期待出力( `tests/golden/*.json` )を生成し、pytest で Python 出力との完全一致を検証します。本体更新への追従時は次で再生成してください:
76
+
77
+ ```bash
78
+ node tools/generate_golden.mjs <soramimicリポジトリのルート> tests/golden
79
+ uv run pytest tests/test_golden.py
80
+ ```
81
+
82
+ - JS実装の癖(オブジェクトのキー列挙順、共有ミューテーション、既知の細かなバグを含む)も出力互換のため忠実に再現しています。詳細は各モジュールのコメント参照。
83
+
84
+ ## 開発
85
+
86
+ ```bash
87
+ uv sync --all-extras
88
+ uv run pytest
89
+ uv run ruff check .
90
+ ```
91
+
92
+ ## License
93
+
94
+ MIT。同梱の英語発音データ( `english-kana.json` )は CMUdict 由来です( `src/soramimic/data/english-kana.LICENSE` 参照)。
@@ -0,0 +1,71 @@
1
+ # soramimic
2
+
3
+ 空耳(替え歌)歌詞を自動生成する [Soramimic](https://soramimic.com) エンジンの Python ライブラリです。
4
+ 本体( soramimic/soramimic の `frontend/src/lib` )の**挙動互換移植**で、同じ入力・同じ単語リストから本体と同じ空耳を生成します。
5
+
6
+ > 開発中(0.x)。API は変わる可能性があります。
7
+
8
+ ## インストール
9
+
10
+ ```bash
11
+ pip install soramimic # コア(トークナイザなし)
12
+ pip install "soramimic[mecab]" # fugashi + ipadic トークナイザ込み
13
+ ```
14
+
15
+ ## 使い方
16
+
17
+ ```python
18
+ from soramimic import create_soramimic, load_default_data
19
+ from soramimic.tokenizers.mecab import MeCabTokenizer # 要 soramimic[mecab]
20
+
21
+ tok = MeCabTokenizer()
22
+ app = create_soramimic(
23
+ **load_default_data(), # 同梱の辞書データ(漢字読み・英語カナ・音類似度など)
24
+ tokenize_sentenses=tok.tokenize,
25
+ get_yomi=tok.get_yomi,
26
+ )
27
+
28
+ # 単語リスト: tidy CSV (soramimic-wordlists 形式) または1行1語のプレーンテキスト
29
+ csv = """id,original,surface,pronunciation
30
+ 1,ヨーグルト,ヨーグルト,ヨーグルト
31
+ 2,ケーキ,ケーキ,ケーキ
32
+ 3,カケル,カケル,カケル
33
+ 4,ヨル,ヨル,ヨル
34
+ 5,マチ,マチ,マチ
35
+ 6,オー,オー,オー
36
+ """
37
+ db = app.word_list.parse_tidy(csv, "") # 第2引数はwhere式 (例: "category = food")
38
+
39
+ results = app.soramimi_maker.generate(["夜の街を駆け抜ける"], db, {})
40
+ for line in results:
41
+ print(" / ".join(w["surface"] for w in line))
42
+ # => ヨル / オー / マチ / オー / カケル / ケーキ
43
+ ```
44
+
45
+ トークナイザは差し替え可能です( `soramimic.tokenizer.Tokenizer` プロトコル参照)。
46
+ kuromoji.js 互換のトークン dict( `surface_form` / `pronunciation` / `pos` …、未知語は `"*"` )を返せば何でも使えます。
47
+ 事前にトークナイズ済みの入力からは `generate_from_tokens()` で生成できます(固定区間 `locks` による部分再生成にも対応)。
48
+
49
+ ## 本体JSとの互換性
50
+
51
+ - モジュールは本体 `frontend/src/lib` の各JSファイルと1:1対応です( `kanaToSyllable.js` → `kana_to_syllable.py` など)。
52
+ - 互換性は**ゴールデンテスト**で担保しています。`tools/generate_golden.mjs` が本体JSを Node で直接実行して期待出力( `tests/golden/*.json` )を生成し、pytest で Python 出力との完全一致を検証します。本体更新への追従時は次で再生成してください:
53
+
54
+ ```bash
55
+ node tools/generate_golden.mjs <soramimicリポジトリのルート> tests/golden
56
+ uv run pytest tests/test_golden.py
57
+ ```
58
+
59
+ - JS実装の癖(オブジェクトのキー列挙順、共有ミューテーション、既知の細かなバグを含む)も出力互換のため忠実に再現しています。詳細は各モジュールのコメント参照。
60
+
61
+ ## 開発
62
+
63
+ ```bash
64
+ uv sync --all-extras
65
+ uv run pytest
66
+ uv run ruff check .
67
+ ```
68
+
69
+ ## License
70
+
71
+ MIT。同梱の英語発音データ( `english-kana.json` )は CMUdict 由来です( `src/soramimic/data/english-kana.LICENSE` 参照)。
@@ -0,0 +1,55 @@
1
+ [project]
2
+ name = "soramimic"
3
+ version = "0.1.0"
4
+ description = "Soramimi (phonetic parody) lyrics generator — Python port of the Soramimic engine"
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ authors = [{ name = "Jiro Shimaya" }]
8
+ requires-python = ">=3.10"
9
+ dependencies = []
10
+ keywords = ["soramimi", "japanese", "lyrics", "phonetics", "nlp"]
11
+ classifiers = [
12
+ "Development Status :: 3 - Alpha",
13
+ "Natural Language :: Japanese",
14
+ "Programming Language :: Python :: 3",
15
+ "Programming Language :: Python :: 3.10",
16
+ "Programming Language :: Python :: 3.11",
17
+ "Programming Language :: Python :: 3.12",
18
+ "Programming Language :: Python :: 3.13",
19
+ "Topic :: Text Processing :: Linguistic",
20
+ ]
21
+
22
+ [project.urls]
23
+ Repository = "https://github.com/soramimic/soramimic-python"
24
+ Issues = "https://github.com/soramimic/soramimic-python/issues"
25
+
26
+ [project.optional-dependencies]
27
+ mecab = ["fugashi>=1.3", "ipadic>=1.0"]
28
+
29
+ [dependency-groups]
30
+ dev = [
31
+ "pytest>=8",
32
+ "ruff>=0.8",
33
+ "mypy>=1.13",
34
+ ]
35
+
36
+ [build-system]
37
+ requires = ["uv_build>=0.7.19,<0.9"]
38
+ build-backend = "uv_build"
39
+
40
+ [tool.ruff]
41
+ line-length = 100
42
+ target-version = "py310"
43
+
44
+ [tool.ruff.lint]
45
+ select = ["E", "F", "I", "UP", "B"]
46
+ ignore = [
47
+ "E501", # 移植元JSとの対応を優先し長い行を許容
48
+ ]
49
+
50
+ [tool.pytest.ini_options]
51
+ testpaths = ["tests"]
52
+
53
+ [tool.mypy]
54
+ python_version = "3.10"
55
+ strict = false
@@ -0,0 +1,17 @@
1
+ """soramimic — 空耳(替え歌)歌詞生成エンジン。
2
+
3
+ soramimic/soramimic の frontend/src/lib (JS) と挙動互換の Python 移植。
4
+ """
5
+
6
+ from .factory import Soramimic, create_soramimic, load_default_data
7
+ from .tokenizer import Tokenizer
8
+
9
+ __version__ = "0.1.0"
10
+
11
+ __all__ = [
12
+ "Soramimic",
13
+ "Tokenizer",
14
+ "create_soramimic",
15
+ "load_default_data",
16
+ "__version__",
17
+ ]