japanese/tests/test_tango.py
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

101 lines
3.5 KiB
Python

from pathlib import Path
from jamdict import Jamdict
from loguru import logger
import pytest
from pl_japanese.tango import Kanji, Tango, TangoKanji
from pl_japanese import JAM_DICT_DB_PATH
@pytest.mark.parametrize("input_str, expected", [
("中->zhong->ちゅう", {"kanji": "","pinyi":"zhong", "kana": "ちゅう"}),
("日->ri->にち", {"kanji": "","pinyi":"ri", "kana": "にち"}),
])
def test_kanji_parse_string(input_str, expected):
result = Kanji.parse_string(input_str)
assert result.kanji == expected["kanji"]
assert result.kana == expected["kana"]
assert result.pinyin == expected["pinyi"]
@pytest.mark.parametrize("input_str, expected", [
("日本語->にほんご", {"tango": "日本語","kana": "にほんご"}),
])
def test_tango_parse_string(input_str, expected):
result = Tango.parse_string(input_str)
assert result.tango == expected["tango"]
assert result.kana == expected["kana"]
@pytest.mark.parametrize("s,expected", [
('日|本|語:に|ほん|ご:ri|ben|yu',
{"tango":{"tango":"日本語","kana":"にほんご"},
"kanji_list":[{"kanji":"","pinyi":"ri","kana":""},
{"kanji":"","pinyi":"ben","kana":"ほん"},\
{"kanji":"","pinyi":"yu","kana":""}]}),
])
def test_tango_kanjis(s: str,expected):
result = TangoKanji()
added = result.add_tango_kanjis(s)
assert added is True
tango_kanjis = result.get_tango_kanjis()
# 应恰好添加一个单词
assert len(tango_kanjis) == 1
(tango, kanji_list), = tango_kanjis.items()
assert tango.tango == expected["tango"]["tango"]
assert tango.kana == expected["tango"]["kana"]
assert len(kanji_list) == len(expected["kanji_list"])
for k, expected_k in zip(kanji_list, expected["kanji_list"]):
assert k.kanji == expected_k["kanji"]
assert k.kana == expected_k["kana"]
assert k.pinyin == expected_k.get("pinyi", "")
logger.debug(f"Kanji-Kana-Tangos:\n{result.get_kanji_kana_tangos_str()}")
logger.debug(f"Pinyin-Kana-Tangos:\n{result.get_pinyin_kana_tangos_str()}")
logger.debug(f"Kanji-Pinyin-Kana-Tangos:\n{result.get_kanji_pinyin_kana_tangos_str()}")
logger.debug(f"Pinyin-Kanji-Kana-Tangos:\n{result.get_pinyin_kanji_kana_tangos_str()}")
@pytest.mark.parametrize("path", [
# ('nihon_kanjis.txt'),
('db/vocabulary.txt'),
])
def test_tango_kanjis_file(get_data_file_path,path: str):
absolute_path = get_data_file_path(path)
logger.debug(f"测试文件绝对路径: {absolute_path}")
tango_kanji = TangoKanji()
success_count = 0
failure_count = 0
for r in tango_kanji.add_from_file_stream(file_path=absolute_path, strict=False):
if r:
success_count += 1
else:
failure_count += 1
tango_kanji.sort_all()
logger.debug(f"Pinyin-Kana-Kanji-Tangos:\n{tango_kanji.get_pinyin_kana_kanji_tangos_str()}")
logger.debug(f"成功: {success_count} 条 | 失败: {failure_count}")
# 至少应成功导入若干条单词
assert success_count > 0
tango_kanjis = tango_kanji.get_tango_kanjis()
assert len(tango_kanjis) == success_count
def test_jmd():
if not Path(JAM_DICT_DB_PATH).is_file():
pytest.skip(f"词典数据库不存在,跳过: {JAM_DICT_DB_PATH}")
jmd = Jamdict(db_file=JAM_DICT_DB_PATH)
result = jmd.lookup('はな')
logger.debug(f"result {result}")
assert result.entries, "查询 'はな' 应至少返回一个词条"
for word in result.entries:
logger.debug(f"word {word}")