Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
morning0801 opened this issue Jul 1, 2024 · 2 comments

Comments

@morning0801
Copy link

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

@morning0801
Copy link
Author

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

@wxywb
Copy link
Owner

wxywb commented Jul 1, 2024

这段代码定义了一个名为 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 辅助提取和处理文本中的标题信息,用于后续的分析或处理过程。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants