文档切片向量化

通用的方法,关键字过滤chunk

ini 复制代码
import faiss
import numpy as np

# 文本切片(带重叠)
def recursive_split_text(text, chunk_size=300, chunk_overlap=50):
    chunks = []
    if not text:
        return chunks
    start_idx = 0
    while start_idx < len(text):
        end_idx = min(start_idx + chunk_size, len(text))
        chunks.append(text[start_idx:end_idx])
        start_idx += (chunk_size - chunk_overlap)
    return chunks

# 关键词筛选:根据提取需求挑相关片段
def filter_chunks(chunks, keywords):
    res = []
    for seg in chunks:
        if any(k in seg for k in keywords):
            res.append(seg)
    return res

# 年报文本
annual_report_text = """
XX公司2025年度年报
一、经营概况
本报告期公司实现营业收入 28.65 亿元,同比增长 12.3%。
归属于上市公司股东的净利润 4.21 亿元,同比增长 8.7%。
二、业务板块
主营业务覆盖医药研发与生产,全年研发投入1.8亿元。
三、股东信息
前三大股东持股比例分别为25%、18%、12%。
四、未来规划
公司计划持续加大海外市场拓展力度。
"""

chunks = recursive_split_text(annual_report_text)
print(f"文档共分割为 {len(chunks)} 个片段\n")

# 定义检索关键词
query_keywords = ["营业收入", "净利润", "研发投入", "股东持股"]
# 筛选有效片段
# related_chunks = filter_chunks(chunks, query_keywords)
# context = "\n".join(related_chunks)
context = "\n".join(chunks)
print("筛选到的相关文本:\n", context, "\n")

# 调用通义千问
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
    api_key='",
    base_url="",
    model_name="qwen-plus",
    temperature=0
)

query = "提取年报中的营业收入、净利润、研发投入、前三大股东持股比例"
prompt = f"""
请根据下面的年报文本内容,完成提取任务:{query}
要求:严格输出标准JSON格式,只保留结果,不要多余解释。
文本内容:
{context}
"""

result = llm.invoke(prompt)
print("提取的结构化年报信息:\n", result.content)

按照结构过滤(如年报的结构)

ini 复制代码
import faiss
import numpy as np

# ===================== 1. 结构化切片(适配年报层级结构) =====================
def split_by_structure(text):
    """
    按年报天然结构分割:空行、换行、标题分割,保留章节完整性
    """
    # 先按连续空行分割大章节
    raw_sections = [s.strip() for s in text.split("\n\n") if s.strip()]
    chunks = []
    for sec in raw_sections:
        # 单章节过长,再按字符二次分割(防止单块太大)
        if len(sec) > 600:
            start = 0
            chunk_size = 400
            overlap = 60
            while start < len(sec):
                end = start + chunk_size
                chunks.append(sec[start:end])
                start += (chunk_size - overlap)
        else:
            chunks.append(sec)
    return chunks

# 关键词精准筛选(按年报业务板块匹配)
def match_section(chunks):
    # 分类关键词,对应年报不同模块
    target_keys = {
        "财务数据": ["营业收入", "净利润", "利润", "营收", "同比"],
        "研发信息": ["研发", "研发投入"],
        "股东信息": ["股东", "持股", "股权"]
    }
    res = []
    for seg in chunks:
        for keys in target_keys.values():
            if any(k in seg for k in keys):
                res.append(seg)
                break
    return res

# ===================== 2. 年报文本(保留原有结构) =====================
annual_report_text = """
XX公司2025年度年报

一、经营概况
本报告期公司实现营业收入 28.65 亿元,同比增长 12.3%。
归属于上市公司股东的净利润 4.21 亿元,同比增长 8.7%。

二、业务板块
主营业务覆盖医药研发与生产,全年研发投入1.8亿元。

三、股东信息
前三大股东持股比例分别为25%、18%、12%。

四、未来规划
公司计划持续加大海外市场拓展力度,布局全球市场。
"""

# 结构化分割
chunks = split_by_structure(annual_report_text)
print(f"按年报结构分割,共 {len(chunks)} 个片段\n")

# 筛选目标章节
related_chunks = match_section(chunks)
context = "\n".join(related_chunks)
print("筛选出的结构化章节内容:\n", context, "\n")

# ===================== 3. 调用通义千问提取数据 =====================
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
    api_key="",
    base_url="",
    model_name="qwen-plus",
    temperature=0
)

query = "提取年报中的营业收入、净利润、研发投入、前三大股东持股比例"
prompt = f"""
请根据下面结构化的年报文本完成提取任务:{query}
要求:严格输出标准JSON格式,只保留结果,不要多余文字、解释。
文本内容:
{context}
"""

result = llm.invoke(prompt)
print("最终提取结果:\n", result.content)
相关推荐
Elastic 中国社区官方博客5 小时前
搜索倍增器:推动收入、生产力和 AI 实现规模化
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
wjkjpcba5 小时前
机器人控制板PCBA怎么加工?从SMT贴片到BGA焊接解析机器人电子制造工艺
大数据·人工智能
青 春 记 忆6 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
小猪妈咪爱学法6 小时前
欧盟最新发布《AI数字综合法案(Digital Omnibus‑on‑AI,AI综合修订法案)
人工智能·网络安全
ZGIAI6 小时前
ZGI Workflow 变量池:接住节点输出
人工智能·架构
梵构广告6 小时前
提升品牌识别度有哪些方法?
人工智能
ZGIAI6 小时前
ZGI 记忆隔离:多人共用不串号
人工智能·架构
星栈独行7 小时前
决定 Agent 交付下限的「操作系统」:Harness 六层架构拆解
人工智能·架构
AKAMAI7 小时前
实时可观测性:Akamai Cloud Pulse 警报功能正式发布
人工智能·云计算
Capricorn19887 小时前
解决全网抄 Karpathy 导致的 LLM Wiki 污染?基于知芽 Notebook Skill 的 raw/ 笔记法排障指南
大数据·论文阅读·人工智能·笔记·论文笔记