- 任务化清洗流程:Task/TaskManager + BatchProcessor 三方法
- 数据目录规范化:data/{db,sources,backup}
- CLI 入口移进包,注册 jclean 命令
- 工作流测试驱动(tests/test_cleaner_workflow.py)
- 40 测试通过
101 lines
3.5 KiB
Python
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}")
|