From 2e57c401e6d9651d4b2f5570dcff2fd509b6e0d1 Mon Sep 17 00:00:00 2001 From: ThearchyHelios Date: Wed, 21 Oct 2026 15:38:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B4=E6=B3=95=E6=A0=B8=E5=AF=B9=E4=B8=8D?= =?UTF-8?q?=E6=A0=B8=E8=A1=A8=E6=A0=BC=E6=AD=A3=E6=96=87=E7=9A=84=E6=A0=BC?= =?UTF-8?q?=EF=BC=88=E5=8E=9F=E6=9D=A5=E5=8F=AA=E8=B7=B3=E8=BF=87=E8=A1=A8?= =?UTF-8?q?=E5=A4=B4=EF=BC=89=EF=BC=9A=E4=B8=80=E6=A0=BC=E6=98=AF=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E5=80=BC=E4=B8=8D=E6=98=AF=E4=B8=80=E5=8F=A5=E8=AF=9D?= =?UTF-8?q?=EF=BC=8C=E5=86=99=E4=BD=9C=E8=80=85=E8=A1=A8=E6=A0=BC=E9=87=8C?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=88=97=E7=9A=84=E3=80=8C=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E3=80=8D=E3=80=81=E8=AF=B4=E6=98=8E=E5=88=97=E7=9A=84=E3=80=8C?= =?UTF-8?q?=E4=B8=BB=E8=A6=81=E6=9D=A5=E8=87=AA=E7=BA=BF=E4=B8=8A=E3=80=8D?= =?UTF-8?q?=E3=80=8C=E6=8C=81=E7=BB=AD=E5=A2=9E=E9=95=BF=E3=80=8D=E6=AF=8F?= =?UTF-8?q?=E4=B8=80=E6=A0=BC=E9=83=BD=E5=8D=95=E7=8B=AC=E6=8A=A5=E6=B2=A1?= =?UTF-8?q?=E6=8C=82=E5=88=86=E6=9E=90=E7=BB=93=E8=AE=BA=EF=BC=9B=E8=A3=81?= =?UTF-8?q?=E5=88=A4=E7=9A=84=E9=A2=84=E7=AD=9B=20judge.claim=5Fpriority?= =?UTF-8?q?=20=E6=9C=AC=E6=9D=A5=E5=B0=B1=E4=B8=8D=E9=80=81=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E7=9A=84=E6=A0=BC=E3=80=82=E6=B5=8B=E8=AF=95=EF=BC=9A?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E4=B9=9D=E6=A0=BC=E9=83=BD=E4=B8=8D=E6=8A=A5?= =?UTF-8?q?=EF=BC=8C=E8=A1=A8=E6=A0=BC=E5=A4=96=E7=9A=84=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E7=85=A7=E6=A0=B8=EF=BC=8C=E7=BB=84=E8=A3=85=E5=92=8C=E5=A4=8D?= =?UTF-8?q?=E6=A0=B8=E4=B8=80=E6=A0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/engine/analysis_claims.py | 9 +++++---- backend/tests/test_analysis_claims.py | 13 +++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/backend/app/engine/analysis_claims.py b/backend/app/engine/analysis_claims.py index 36b46e93..9936b3aa 100644 --- a/backend/app/engine/analysis_claims.py +++ b/backend/app/engine/analysis_claims.py @@ -20,7 +20,8 @@ 输入([[i:]])作依据,或者写成推测(可能、或许、推测、待核实、不排除、疑似)。分句里已有来源一类判断词的,因果词 并进那一处核。原因说的是数据本身(「由于数据只到 10 月 16 日」「样本少」)的不算 6. **不扫的地方**:知识库原话([[q:]] 片段)、系统渲染的判定语([[a:]] 片段)、别的引用渲染出来的字、标题、代码块、 - 表头;分析范围是文档的结构化字段(analysis_scope),本来就不在正文里 + 表格(表头和正文的格都不扫:一格是一个值不是一句话,状态列的「异常」、说明列的「主要来自线上」不是判断;裁判的预筛 + judge.claim_priority 也不送表格的格);分析范围是文档的结构化字段(analysis_scope),本来就不在正文里 违规三种(CODES):analysis_claim_uncited(有判断词,依据里没有对应种类的分析结论)、analysis_claim_mismatch(挂了,判定、 点名的段、方向对不上,含挂了算不了的结论)、causal_unsupported(因果词没有依据、也不是推测)。每条带:代码、判断词 @@ -803,13 +804,13 @@ def _sentence(unit: dict[str, Any], aliases: Iterable[str], results: Mapping[str def check_doc(doc: dict[str, Any], catalog: Mapping[str, Any], *, cited: Mapping[int, list[str]] | None = None, version: int | None = None, load: Any = None) -> list[dict[str, Any]]: """一份报告文档的说法违规。cited 是 {id(unit): 这句按重新解析的引用算的依据}(verify_doc 交进来),不给就用文档里 - 记的 cites;load 取回只带摘要的条目的整份结论(results_of)。标题、代码块、表头不核。""" + 记的 cites;load 取回只带摘要的条目的整份结论(results_of)。标题、代码块、表格(表头和正文的格)不核。""" results = results_of(catalog, load) available = _available(results) out: list[dict[str, Any]] = [] for block, unit in iter_units(doc): - if block.get("type") in ("heading", "code") or unit.get("kind") in ("heading", "code") \ - or (unit.get("loc") or {}).get("row") == -1: + if block.get("type") in ("heading", "code", "table") or unit.get("kind") in ("heading", "code") \ + or unit.get("loc") is not None: continue aliases = cited.get(id(unit), []) if cited is not None else unit.get("cites") or [] sentence = _sentence(unit, aliases, results) diff --git a/backend/tests/test_analysis_claims.py b/backend/tests/test_analysis_claims.py index 18c9f7f1..4e9326d8 100644 --- a/backend/tests/test_analysis_claims.py +++ b/backend/tests/test_analysis_claims.py @@ -413,6 +413,19 @@ def test_system_rendered_phrases_quotes_headings_and_code_are_not_scanned(): assert codes(ac.check_doc(doc, catalog())) == [ac.UNCITED] +def test_table_cells_written_by_the_writer_are_not_checked(): + """表格的格不核(表头、正文都不核):一格是一个值不是一句话,状态列的「异常」、说明列的「主要来自线上」不是判断 + (judge.claim_priority 也不送表格的格)。表格外的段落、列表照核。""" + raw = ("本周销售额 [[m:gmv]]。[[see:m:gmv]]\n\n| 门店 | 状态 | 说明 |\n|---|---|---|\n| 甲店 | 异常 | 主要来自线上 |\n" + "| 乙店 | 正常 | 持续增长 |\n\n```\n异常订单激增\n```\n\n## 主要来自华东的下降\n\n- 华东拖累明显\n") + doc = compose_doc(raw, catalog(), analysis_claims="check") + tables = {u["id"] for b in doc["blocks"] if b["type"] == "table" for u in b["units"]} + assert len(tables) == 9, "表格切成了一格一格" + [v] = found(doc) + assert v["code"] == ac.UNCITED and v["text"] == "拖累" and v["unit"] not in tables + assert [v["text"] for v in found(verify_doc(doc, catalog()))] == ["拖累"] + + def test_rendered_values_name_segments_but_are_not_judgement_words(): # [[v:…]] 渲染出来的「华东」能点名,渲染出来的「异常」不是写作者下的判断 doc = {"markdown": "", "blocks": [{"type": "paragraph", "units": [{"id": "u0", "kind": "claim", "cites": ["A1"],