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}")