自制RAG工具:docx文档读取工具

1. 介绍

在RAG相关的工作中,经常会用到读取docx文档的功能,为了更好地管理文档中的各个分块,以提供更高质量的prompt给LLM,我在去年实现了一个轻量好用的docx管理工具。

主要应用到python模块docx。安装依赖:

python-docx                              1.0.1

2. 源码

代码结构非常简单,仅有两个类构成。以及需要引用的部分:

import docx
from uuid import uuid4
from typing import *

ZH2NUM = {
   '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '七': 7, '八': 8, '九': 9, '十': 10}

2.1 chunk

chunk类指的是文档中一个分块,考虑到LLM的长度限制问题和成本问题,通常需要对文档进行分块处理,尤其是对于篇幅很长的文档,需要在文档内部再做一次召回。

class Chunk:
    """
    文本块
    ---------------
    ver: 2023-11-02
    by: changhongyu
    """
    def __init__(self, id_: str, level: int, content: str, children: List = None, max_depth: int = 99):
        """
        :param id_: 此文本块的唯一id
        :param level: 此文本块的层级
        :param content: 此文本块的内容
        :param children: 此文本块的所有下一级文本块
        :param max_depth: 允许存在的文本块最大层级数,由DocReader控制
        """
        self.id = id_
        self.level = level
        self.content = content
        self.children = children
        self.max_depth = max_depth
        if not self.children:
            self.children = []
        self.path_to_this_chunk = None
        self.title_path = None

    def __len__(self):
        return len(self.content)

    def __str__(self):
        msg = ''
        msg += f'[{
     self.level}]'
        if self.level >= 99:
            msg += '  ' * self.max_depth
        else:
            msg += '  ' * (self.level - 1)
        if len(self.content) < 20:
            msg += self.content
        else:
            msg += self.content[:20
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值