"""语义实体:把段落 + 字段值 + 样式合在一起。""" from __future__ import annotations from typing import Any, Literal from pydantic import BaseModel, Field from fastapi_modules.fastapi_leaudit.govdoc_engine.models import ParagraphStyle EntitySource = Literal["structural", "llm", "derived"] class SemanticEntity(BaseModel): """公文中的一个语义单元(标题 / 发文字号 / 主送机关 / ...)。 - structural:name 与某个 role 一一对应,paragraph_indices 非空,style 可用。 - derived:从其他实体推导(如 wenzhong 从 title 末尾),paragraph_indices 借用源段落。 - llm:仅当结构 / 派生路径都失败时启用,paragraph_indices 可能为空。 """ name: str text: str = "" paragraph_indices: list[int] = Field(default_factory=list) primary_role: str | None = None style: ParagraphStyle | None = None extra: dict[str, Any] = Field(default_factory=dict) source: EntitySource = "structural" confidence: float = 1.0