wxywb / history_rag

789 stars 102 forks source link

Milvus模式下怎么使用自己的文档作为知识库,才能返回正确的《书名》和出处? #75

Open morning0801 opened 2 weeks ago

morning0801 commented 2 weeks ago

Milvus模式下怎么使用自己的文档作为知识库,才能返回正确的《书名》和出处?是否需要在build前对文本格式做一定的处理?我直接build了一个本地的txt文件,但返回结果时”《》“中的内容并不是小标题而是很长的一段内容文本。

morning0801 commented 2 weeks ago

目前看到了history_sentence_window.py脚本中的处理方式,准备尝试复刻

wxywb commented 2 weeks ago

这段代码定义了一个名为 HistorySentenceWindowNodeParser 的类,它继承自 NodeParser,用于解析文档中的节点。让我来解释它的工作原理和标题提取的过程:

  1. 类的结构

    • 属性定义:定义了几个类属性,如 sentence_splitter(用于拆分文本的方法)、window_size(窗口大小,即每个句子周围要捕获的句子数)、window_metadata_keyoriginal_text_metadata_key 等(用于存储窗口句子和原始文本的元数据键)。
    • 类方法:包括 class_name() 用于返回类名、book_name() 用于根据文件名映射到书名、from_defaults() 用于根据默认值创建类实例等。
  2. 标题提取

    • TitleLocalizer 类负责从文本中提取标题。
    • analyze_titles() 方法接收文本作为输入,按行划分文本,并识别包含特定字符(如 "纪" 和 "传")的行作为标题。
    • build_window_nodes_from_documents() 方法使用 analyze_titles() 提取的标题,将文本分割成行,并为每行构建节点。
  3. 节点构建和元数据处理

    • build_window_nodes_from_documents() 中,每行文本被拆分成句子,并构建成节点(BaseNode)。
    • 对每个节点,根据设定的 window_size,获取周围若干个句子,将它们作为窗口文本存储在节点的元数据中。
    • 原始文本也存储在节点的元数据中,以及其他自定义的元数据,如书名和标题信息。

总体而言,这个类的作用是将文本分解成节点,并为每个节点附加上下文窗口和其他元数据,同时通过 TitleLocalizer 辅助提取和处理文本中的标题信息,用于后续的分析或处理过程。