RAGFlow嵌入自定义文件解析代码

目录

  • 一、写自己的文档解析代码
    • 1、`def __call__`
    • 2、`def parser_txt`
    • 3、`__init__.py`
  • 二、导入到naive.py
    • 1、找到文件
    • 2、添加代码
  • 三、file_utils.py
    • 1、找到文件
    • 2、重启容器
  • 附:行业词库添加

进入docker容器

docker exec -it ragflow-server /bin/bash

一、写自己的文档解析代码

来到路径

/ragflow/deepdoc/parser/

在该目录下创建自己的文档解析文件,可以参考txt_parser.py

  • 其中fnm是文件名、binary是二进制文件数据
  • 如果你写的文件能通过二进制直接解析,那么return self.parser_txt(txt, chunk_token_num, delimiter)这里就不用动了
  • fnm讲道理应该是文件路径的,因为with open(fnm, "r") as f:,但是我实验时,得到的都是文件名,这个不能作为路径去打开文件

1、def __call__

所以,这部分函数在改动时,能直接走二进制数据流的就是删除else:和后面的代码直到return即可
不能走通的,就使用txt = fnm,在naive.py给到临时文件路径,在def parser_txt解析即可

2、def parser_txt

这里比较简单,自己的解析完成后,将分好的段落放入列表text_list,返回时为

return [[c,""] for c in text_list]

3、__init__.py

仿照其他解析器,导入即可

二、导入到naive.py

1、找到文件

/ragflow/rag/app/naive.py

2、添加代码

from deepdoc.parser import yourParser
import tempfile
# 236行添加新的elif,我这里以vsdx文件为例
    elif re.search(r"\.vsdx$", filename, re.IGNORECASE):
        callback(0.1, "Start to parse.")
        with tempfile.NamedTemporaryFile(suffix='.vsdx', delete=True) as temp_file:
            temp_file.write(binary)
            temp_file.flush()  # 确保数据写入文件
            sections = VsdxParser()(temp_file,binary,
                                parser_config.get("chunk_token_num", 128),
                                parser_config.get("delimiter", "\n!?;。;!?"))
        callback(0.8, "Finish parsing.")

三、file_utils.py

1、找到文件

/ragflow/api/utils/file_utils.py

文档解析在159行添加你的文件格式
音频解析在163行添加你的文件格式
图像解析在166行添加你的文件格式

2、重启容器

结束

附:行业词库添加

rag/res/huqie.txt

替换成自己的行业词库

你可能感兴趣的:(rag,ragflow,人工智能)