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


进入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

替换成自己的行业词库

内容概要:本文详细介绍了 Deepseek 和本地知识库的部署流程及应用。首先是基于 Cherry Studio 或 AnythingLLM 搭建个人知识库的方法,强调配置嵌入模型、安装 cherry studio 或 AnythingLLM 软件,并正确设置本地服务及模型配置的重要性。具体的操作步骤覆盖了从下载、配置到添加知识文档和配置远程文档的一系列过程。接着介绍了通过搜索验证、大模型处理等功能展示如何利用本地知识库进行高效的搜索与数据分析。特别提到了使用深度搜索来提高搜索的准确性及其应用场景——如在小红书平台上进行内容运营指导。最后比较了两种不同的搭建工具,指出 Cherry Studio 更适用于非技术人员,而 AnythingLLM 更倾向于具备程序思维的技术人员。 适合人群:本文主要针对有一定技术水平的企业用户和个人开发者,特别是对隐私保护敏感并希望通过私有化部署增强安全性的人群。 使用场景及目标:用户可以通过本文的学习掌握一套完整的本地知识管理系统搭建流程,旨在帮助他们在工作和生活中更好地管理和应用知识库。具体应用场景包括但不限于企业内部培训材料存储、科研文献检索、个性化内容推荐以及个人学习和发展等领域。 其他说明:在选择具体的构建工具时需考虑自身实际情况。对于大多数用户来说,Cherry Studio 提供了一个更友好便捷的选择;但对于那些寻求更多定制化的专业人士而言,AnythingLLM 则是一个不错的选择。同时提醒用户要注意隐私保护尤其是涉及敏感数据的情况下避免不必要的网络连接以确保信息安全。
### RagFlow 解析 PDF 文件失败的解决方案 当面对 RagFlow解析 PDF 文件过程中出现问题的情况时,可以考虑以下几个方面来排查并解决问题。 #### 1. 验证输入文件的有效性 确保待解析的 PDF 文件本身没有损坏。尝试打开该文件以确认其可读性和完整性。如果文件无法正常显示,则可能是源文件存在问题而非 RagFlow 工具本身的错误[^1]。 #### 2. 更新依赖库版本 检查所使用的 Python 库(如 `pdfplumber` 或者其他第三方库)是否为最新版。有时旧版本可能存在某些 bug 导致特定类型的 PDF 处理异常;更新至最新稳定版本可能会修复这些已知问题[^2]。 #### 3. 调整参数设置 对于复杂布局或多栏式的 PDF 文档,在调用 RagFlow API 进行解析操作前适当调整一些配置选项可能有助于提高成功率。例如修改分页策略、字体识别模式等参数可以帮助更好地适应不同类型的内容结构[^4]。 #### 4. 使用替代方法或工具组合 考虑到单一工具未必能完美应对所有场景下的需求,可以在必要时引入额外的技术手段作为补充。比如先通过 PyMuPDF 提取页面图像再利用 Tesseract OCR 技术获取文字信息,或者借助 Apache PDFBox 来预处理文档以便后续更顺利地完成内容抽取任务[^3]。 ```python import pdfplumber def extract_text_from_pdf(file_path): try: with pdfplumber.open(file_path) as pdf: pages = [] for page in pdf.pages: text = page.extract_text() tables = page.find_tables() if not text and tables: for table in tables: text += '\n'.join(['\t'.join(cell.get_text() for cell in row) for row in table.cells]) pages.append(text) return "\n".join(pages) except Exception as e: print(f"Error occurred while processing {file_path}: ", str(e)) raise ``` 此代码片段展示了如何使用 `pdfplumber` 提取 PDF 页面中的文本和表格内容,并针对无文本但有表格的情况下进行了特殊处理。这只是一个简单的例子,实际应用中可根据具体情况进行相应扩展优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值