35 lines
935 B
Python
35 lines
935 B
Python
import jaconv
|
|
import pykakasi
|
|
|
|
kks = pykakasi.kakasi()
|
|
kks.setMode("H", "a") # 平假名 -> ascii (罗马字)
|
|
kks.setMode("K", "a") # 片假名 -> ascii
|
|
kks.setMode("J", "a") # 汉字 -> ascii
|
|
kks.setMode("r", "Hepburn") # 转换成 Hepburn 罗马字
|
|
conv = kks.getConverter()
|
|
|
|
|
|
def all_in_kana(text: str) -> str:
|
|
"""
|
|
将输入统一转换为平假名,支持:
|
|
- 平假名
|
|
- 片假名
|
|
- 罗马字 (Hepburn 转写)
|
|
|
|
返回:平假名字符串
|
|
"""
|
|
if not text:
|
|
return ""
|
|
|
|
# 1. 片假名 → 平假名
|
|
normalized = jaconv.kata2hira(text)
|
|
|
|
# 2. 如果里面含有罗马字字符,就先转成假名
|
|
if any("a" <= ch.lower() <= "z" for ch in normalized):
|
|
hira = conv.do(normalized) # 罗马字 -> 平假名
|
|
normalized = jaconv.kata2hira(hira)
|
|
|
|
# 3. 再次片假名 -> 平假名保险
|
|
normalized = jaconv.kata2hira(normalized)
|
|
|
|
return normalized |