panli 1f64c87d0e Initial commit: 日语词表清洗工具(任务化架构)
- 任务化清洗流程:Task/TaskManager + BatchProcessor 三方法
- 数据目录规范化:data/{db,sources,backup}
- CLI 入口移进包,注册 jclean 命令
- 工作流测试驱动(tests/test_cleaner_workflow.py)
- 40 测试通过
2026-08-19 15:04:18 +08:00

58 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
数据模型Kanji汉字-假名-拼音、Tango单词-假名)
"""
from pydantic import BaseModel
class Kanji(BaseModel):
"""单个汉字的三要素:汉字、假名读音、拼音"""
kanji: str = ""
kana: str = ""
pinyin: str = ""
@classmethod
def parse_string(cls, s: str, splitter: str = '->') -> 'Kanji':
"""'中->zhong->ちゅう' 格式的字符串解析为 Kanji 对象"""
if splitter not in s:
raise ValueError("字符串格式应为 '汉字->拼音->假名' ")
kanji, pinyin, kana = s.split(splitter, maxsplit=2)
return cls(kanji=kanji.strip(), pinyin=pinyin.strip(), kana=kana.strip())
def to_json(self, indent=None) -> str:
"""将对象转为 JSON 字符串"""
return self.model_dump_json(indent=indent)
def format(self, splitter: str = '->') -> str:
"""格式化输出"""
return f"{self.kanji}{splitter}{self.pinyin}{splitter}{self.kana}"
class Tango(BaseModel):
"""一个日语单词:单词本身 + 假名读音"""
tango: str
kana: str
@classmethod
def parse_string(cls, s: str, splitter: str = '->') -> 'Tango':
"""'日本語->にほんご' 格式的字符串解析为 Tango 对象"""
if splitter not in s:
raise ValueError("字符串格式应为 '日语单词->假名' ")
tango, kana = s.split(splitter, maxsplit=1)
return cls(tango=tango.strip(), kana=kana.strip())
def to_json(self, indent=None) -> str:
"""将对象转为 JSON 字符串"""
return self.model_dump_json(indent=indent)
def format(self, splitter: str = '->') -> str:
"""格式化输出"""
return f"{self.tango}{splitter}{self.kana}"
def __eq__(self, other: object) -> bool:
if not isinstance(other, Tango):
return False
return (self.tango, self.kana) == (other.tango, other.kana)
def __hash__(self) -> int:
return hash((self.tango, self.kana))