File size: 2,144 Bytes
0e6887b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | """辅料连写串词典分词回归测试(skills/compatibility/skill._heuristic_excipients)。
复现真实问题:多个辅料无分隔符连写时只识别其中少数。修复后应按 KB 别名最大匹配
切分为全部辅料,未知段保留为独立(未知)辅料。
"""
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "core"))
from skills.compatibility.skill import _heuristic_excipients # noqa: E402
from skills.compatibility.knowledge_base import get_default_kb # noqa: E402
def test_concatenated_excipients_segmented_to_six():
text = "马铃薯淀粉微晶纤维素聚维酮硬脂酸钙交联羧甲基纤维素钠欧巴代"
out = _heuristic_excipients(text)
assert out == [
"马铃薯淀粉", "微晶纤维素", "聚维酮", "硬脂酸钙",
"交联羧甲基纤维素钠", "欧巴代",
]
kb = get_default_kb()
# 全部应解析为知识库已知条目(修复前 硬脂酸钙 / 欧巴代 / 马铃薯淀粉 无法识别)。
keys = {kb.resolve(n).key for n in out}
assert keys == {"starch", "mcc", "povidone", "calcium_stearate",
"croscarmellose_sodium", "opadry"}
assert all(kb.resolve(n).known for n in out)
def test_delimited_input_preserved():
assert _heuristic_excipients("乳糖、硬脂酸镁,微晶纤维素") == ["乳糖", "硬脂酸镁", "微晶纤维素"]
def test_single_known_and_unknown_preserved():
assert _heuristic_excipients("乳糖") == ["乳糖"]
assert _heuristic_excipients("完全不存在的辅料QWERTY") == ["完全不存在的辅料QWERTY"]
def test_dedup_repeated_excipients():
out = _heuristic_excipients("乳糖、乳糖、微晶纤维素")
assert out == ["乳糖", "微晶纤维素"]
def test_unknown_run_between_known_kept():
"""已知辅料之间夹未知串时,未知串作为独立辅料保留(不丢失)。"""
out = _heuristic_excipients("微晶纤维素某新型辅料XYZ聚维酮")
assert "微晶纤维素" in out and "聚维酮" in out
assert any("某新型辅料" in x for x in out)
|