{"id":23481,"library":"cutlet","title":"Cutlet","description":"Japanese to romaji converter using fugashi and kakasi. Current version 0.5.0 (May 2025). Low/medium release cadence; pre-1.0 API cleanup expected.","status":"active","version":"0.5.0","language":"python","source_language":"en","source_url":"https://github.com/polm/cutlet","tags":["japanese","romaji","converter","nlp"],"install":[{"cmd":"pip install cutlet","lang":"bash","label":"Install from PyPI"}],"dependencies":[{"reason":"Japanese tokenizer (required runtime dependency)","package":"fugashi","optional":false},{"reason":"Kanji to kana conversion (required runtime dependency)","package":"kakasi","optional":false}],"imports":[{"note":"","wrong":null,"symbol":"Cutlet","correct":"from cutlet import Cutlet"}],"quickstart":{"code":"from cutlet import Cutlet\n\nkatsu = Cutlet()\nprint(katsu.romaji('私は猫です'))\n# 'watashi ha neko desu'","lang":"python","description":"Basic romaji conversion. Note: particles like は are romanized as 'ha' not 'wa'."},"warnings":[{"fix":"If you relied on whitespace being modified, adjust logic to handle ASCII whitespace separately.","message":"v0.5.0 changed behavior: whitespace in ASCII strings is now preserved instead of being subject to the same rules as Japanese text. Output may differ from v0.4.0.","severity":"breaking","affected_versions":"0.5.0 (when upgrading from <0.5.0)"},{"fix":"Use hepburn=False or override via manual post-processing if Hepburn-style romanization is desired.","message":"Particles like は are romanized as 'ha' (not 'wa') and へ as 'he' (not 'e'). This is technically correct but may be unexpected for learners.","severity":"gotcha","affected_versions":"all"},{"fix":"Set the 'unknown' argument to a different placeholder or handle missing chars manually.","message":"Unknown characters (non-Japanese, non-ASCII) are converted to '?' by default. This can silently corrupt text.","severity":"gotcha","affected_versions":"all"},{"fix":"Instantiate a new Cutlet object per thread.","message":"The Cutlet class is stateful; do not reuse the same instance across threads without synchronization.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Use: from cutlet import Cutlet","cause":"Using wrong import syntax (e.g., from cutlet import cutlet).","error":"ImportError: cannot import name 'Cutlet' from 'cutlet'"},{"fix":"pip install fugashi (or use a dict like pip install cutlet[fugashi] if available)","cause":"Missing transitive dependency. cutlet requires fugashi.","error":"ModuleNotFoundError: No module named 'fugashi'"},{"fix":"pip install unidic-lite","cause":"Fugashi requires a dictionary to be installed separately.","error":"RuntimeError: Please install a dictionary for fugashi (e.g., pip install unidic-lite)"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}