test: Task1质量审查补测——④真覆盖/③保底覆盖/分组注释/渠道映射查表化
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -276,17 +276,24 @@ REASK_PATTERNS = [
|
|||||||
# 渠道精确化(2026-10-08 spec §4.4): REASK 模式命中后按渠道词分辨——
|
# 渠道精确化(2026-10-08 spec §4.4): REASK 模式命中后按渠道词分辨——
|
||||||
# 索要已在手的渠道才丢,索要缺失渠道放行(双要补邮箱场景);泛渠道词
|
# 索要已在手的渠道才丢,索要缺失渠道放行(双要补邮箱场景);泛渠道词
|
||||||
# 只要手上有任何号码渠道即丢(宁丢勿放);精确+泛同句共存时按①②自然
|
# 只要手上有任何号码渠道即丢(宁丢勿放);精确+泛同句共存时按①②自然
|
||||||
# 实现任一命中判丢。中文泛词不用 \b(CJK 无词边界,"电话"前 \b 永不成立)。
|
# 实现任一命中判丢。中文泛词不用 \b(CJK 无词边界,"电话"前 \b 在
|
||||||
|
# 主流 CJK 连写形态下不成立)。
|
||||||
_PRECISE_CHANNEL_RE = re.compile(r"whatsapp|e-?mail|邮箱|微信|wechat", re.I)
|
_PRECISE_CHANNEL_RE = re.compile(r"whatsapp|e-?mail|邮箱|微信|wechat", re.I)
|
||||||
|
# 匹配形态→渠道键查表(对齐 contact_pipeline._NUMBER_FIRST_CHANNEL 先例:
|
||||||
|
# 未来扩 _PRECISE_CHANNEL_RE 加新渠道词而漏配此表 → KeyError 显性失败,
|
||||||
|
# 而非链式三元静默兜到 whatsapp)
|
||||||
|
_PRECISE_CHANNEL_MAP = {
|
||||||
|
"whatsapp": "whatsapp",
|
||||||
|
"e-mail": "email", "email": "email", "邮箱": "email",
|
||||||
|
"wechat": "wechat", "微信": "wechat",
|
||||||
|
}
|
||||||
_GENERIC_CONTACT_RE = re.compile(r"\b(?:number|phone|contact)\b|电话|联系方式|号码", re.I)
|
_GENERIC_CONTACT_RE = re.compile(r"\b(?:number|phone|contact)\b|电话|联系方式|号码", re.I)
|
||||||
|
|
||||||
|
|
||||||
def _precise_channels_in(s: str) -> set:
|
def _precise_channels_in(s: str) -> set:
|
||||||
out = set()
|
out = set()
|
||||||
for m in _PRECISE_CHANNEL_RE.finditer(s):
|
for m in _PRECISE_CHANNEL_RE.finditer(s):
|
||||||
w = m.group(0).lower()
|
out.add(_PRECISE_CHANNEL_MAP[m.group(0).lower()])
|
||||||
out.add("email" if w in ("e-mail", "email", "邮箱")
|
|
||||||
else "wechat" if w in ("微信", "wechat") else "whatsapp")
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -200,14 +200,21 @@ def test_reask_wall_channel_precision():
|
|||||||
索要缺失渠道放行;泛渠道词只要手上有任何号码渠道即丢(宁丢勿放)。"""
|
索要缺失渠道放行;泛渠道词只要手上有任何号码渠道即丢(宁丢勿放)。"""
|
||||||
wa = {"whatsapp"}
|
wa = {"whatsapp"}
|
||||||
em = {"email"}
|
em = {"email"}
|
||||||
|
# 精确渠道词: ①在手→丢 / ④缺失→放行
|
||||||
assert asks_contact("What's your WhatsApp number?", wa) is True
|
assert asks_contact("What's your WhatsApp number?", wa) is True
|
||||||
assert asks_contact("留个邮箱吧", em) is True
|
assert asks_contact("留个邮箱吧", em) is True
|
||||||
assert asks_contact("And an email address would help too", wa) is False
|
assert asks_contact("What's your email address?", wa) is False
|
||||||
assert asks_contact("你WhatsApp多少?", em) is False
|
assert asks_contact("你WhatsApp多少?", em) is False
|
||||||
|
# 泛渠道词: ②手上有号码渠道→丢 / ④无号码渠道(只 email)→放行
|
||||||
assert asks_contact("What's your number?", wa) is True
|
assert asks_contact("What's your number?", wa) is True
|
||||||
assert asks_contact("留个电话呗", wa) is True
|
assert asks_contact("留个电话呗", wa) is True
|
||||||
assert asks_contact("What's your number?", em) is False
|
assert asks_contact("What's your number?", em) is False
|
||||||
|
# 精确+泛同句共存: 按①②自然实现,任一命中判丢
|
||||||
assert asks_contact("leave your number or email", wa) is True
|
assert asks_contact("leave your number or email", wa) is True
|
||||||
|
# ③保底: 命中 REASK 但无任何渠道词("Drop yours too"式重复纠缠)→保守丢
|
||||||
|
assert asks_contact("Drop yours too and our manager will send the quote!",
|
||||||
|
{"phone"}) is True
|
||||||
|
# 无参: 原行为向后兼容(命中即丢/未命中放行)
|
||||||
assert asks_contact("What's your WhatsApp number?") is True
|
assert asks_contact("What's your WhatsApp number?") is True
|
||||||
assert asks_contact("hello there") is False
|
assert asks_contact("hello there") is False
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user