v1.2.2 实体标记策略可配置:默认只标记首次出现(管理后台可切全部标记);前端移除管理入口(⚙️),/admin 地址保持可用

This commit is contained in:
2026-08-17 21:25:10 +08:00
parent a122a498e1
commit c03d6c3fe2
6 changed files with 21 additions and 3 deletions
+11 -1
View File
@@ -164,13 +164,23 @@ def _match_games(text, game_refs):
return cards
def link_entities(text, game_refs=None):
def link_entities(text, game_refs=None, mark_mode="first"):
"""主入口:扫描回答文本。
返回 (spans, cards)
spans: 实体命中区间(前端高亮标记用),按 start 升序、互不重叠
mark_mode="first" 时同一实体(type,id)只保留首次出现;"all" 时全部标记
cards: 快速查看卡片数据(每类限量,避免刷屏)
"""
spans = _find_spans(text or "")
if mark_mode == "first":
seen, kept = set(), []
for sp in spans: # spans 已按 start 升序 → 保留首次
key = (sp["type"], sp["id"])
if key in seen:
continue
seen.add(key)
kept.append(sp)
spans = kept
cards = []
seen_cards = set()
for sp in spans: