|
@@ -221,7 +221,9 @@ class StandardRepository:
|
|
|
# ========== 第二轮:从配置读取并去除指定符号 ==========
|
|
# ========== 第二轮:从配置读取并去除指定符号 ==========
|
|
|
# 读取配置中的符号列表,默认使用常见符号
|
|
# 读取配置中的符号列表,默认使用常见符号
|
|
|
# 包含各种连接符:半角连字符(-)、全角连接号(-)、全角破折号(—)
|
|
# 包含各种连接符:半角连字符(-)、全角连接号(-)、全角破折号(—)
|
|
|
- default_symbols = '),-,.,/,,:,[,],【,】,〔,〕,(,),-,—'
|
|
|
|
|
|
|
+ # 包含各种连接符:半角连字符(-)、全角连接号(-)、全角破折号(—)、水平线(―)、
|
|
|
|
|
+ # 连字符(‐)、不换行连字符(‑)、数字线(‒)、短破折号(–)、减号(−)
|
|
|
|
|
+ default_symbols = '),-,.,/,,:,[,],【,】,〔,〕,(,),-,—,―,‐,‑,‒,–,−'
|
|
|
|
|
|
|
|
if _CONFIG_AVAILABLE and config_handler:
|
|
if _CONFIG_AVAILABLE and config_handler:
|
|
|
try:
|
|
try:
|
|
@@ -362,26 +364,15 @@ class StandardMatcher:
|
|
|
# 名称规范化后匹配成功,按完全匹配处理
|
|
# 名称规范化后匹配成功,按完全匹配处理
|
|
|
return self._handle_full_match(result, db_record)
|
|
return self._handle_full_match(result, db_record)
|
|
|
|
|
|
|
|
- # 尝试用规范化名称模糊匹配
|
|
|
|
|
- name_matches = self.repo.find_by_normalized_name(result.normalized_name)
|
|
|
|
|
-
|
|
|
|
|
- # 查找精确名称匹配(使用规范化名称)
|
|
|
|
|
- exact_match = self._find_exact_name_match(name_matches, result.normalized_name)
|
|
|
|
|
-
|
|
|
|
|
- if exact_match:
|
|
|
|
|
- # 找到名称匹配的记录,检查标准号是否一致
|
|
|
|
|
- if result.normalized_number == exact_match.normalized_number:
|
|
|
|
|
- # 标准号实质一致,按完全匹配处理
|
|
|
|
|
- return self._handle_full_match(result, exact_match)
|
|
|
|
|
- else:
|
|
|
|
|
- # 名称匹配但标准号不一致 = 标准号错误
|
|
|
|
|
- return self._set_mismatch_result(result, exact_match)
|
|
|
|
|
-
|
|
|
|
|
- # 名称完全不匹配,但标准号已匹配成功
|
|
|
|
|
- # 说明该标准存在于库中,应返回不匹配而非不存在
|
|
|
|
|
|
|
+ # 【关键修复】标准号已匹配成功,即使名称不完全匹配,
|
|
|
|
|
+ # 也不应该再通过名称去查找其他版本的记录。
|
|
|
|
|
+ # 因为这会导致:2017版(现行)→ 通过名称找到 → 2012版(废止)
|
|
|
|
|
+ # 应直接基于已匹配的记录返回结果。
|
|
|
if db_record.validity in [ValidityStatus.CURRENT.value, ValidityStatus.TRIAL.value]:
|
|
if db_record.validity in [ValidityStatus.CURRENT.value, ValidityStatus.TRIAL.value]:
|
|
|
|
|
+ # 现行/试行版本,返回不匹配,建议改为当前匹配的标准号
|
|
|
return self._set_mismatch_result(result, db_record)
|
|
return self._set_mismatch_result(result, db_record)
|
|
|
elif db_record.validity == ValidityStatus.ABOLISHED.value:
|
|
elif db_record.validity == ValidityStatus.ABOLISHED.value:
|
|
|
|
|
+ # 废止版本,查找同名现行版本作为替代
|
|
|
return self._handle_abolished(result, db_record)
|
|
return self._handle_abolished(result, db_record)
|
|
|
|
|
|
|
|
return self._set_not_found_result(result)
|
|
return self._set_not_found_result(result)
|