Langchain实现文件加载和分割

最近有知识库需要,学习了langchain的文件加载器和分割器

网上代码,缺乏详细环境配置,踩了亿点点坑,所以记录一下

首先环境搭建,我是用anaconda

命令行输入:conda create -n splitter python==3.8.11

PS:用3.8是因为想用飞浆的OCR,比较稳定,为啥.11呢,因为langchain大部分要求3.8.1以上,所以目前用这个,暂时没发现什么问题。

环境搭建好了,conda activate splitter

启动环境以后到pycharm新建项目,这里

选择本地conda.bat(原因是我的pycharm找不到我的conda环境),后面再选择具体的虚拟环境。

然后就是一系列的pip

pip install langchain

pip install langchain-community(原因是我测试过程中发现有些包现在只在社区版能导入了,具体的记不清了)

pip install -qU langchain-text-splitters(安装分解器)

pip install --upgrade --quiet langchain-text-splitters tiktoken(为了测试依照Token数进行分割,无需要可以不安装)

到这里,常规的txt文件就已经可以分割了,我这里提供一段测试代码,文档自行写一些东西就可以。

from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_text_splitters import CharacterTextSplitter

# This is a long document we can split up.
with open("./files/test.txt", 'r', encoding='utf-8') as f:
    state_of_the_union = f.read()
# 方法一 递归字符拆分,中文更为实用
text_splitter = RecursiveCharacterTextSplitter(
    separators=[  # 分隔符字符串数组
        "\n\n",
        "\n",
        " ",
        # 因为这里是中文文档,加上这个会影响小数点".",
        ",",
        "\u200B",  # Zero-width space
        "\uff0c",  # Fullwidth comma
        "\u3001",  # Ideographic comma
        "\uff0e",  # Fullwidth full stop
        "\u3002",  # Ideographic full stop
        ""
    ],
    chunk_size=200,  # 每个文档的字符数量限制
    chunk_overlap=20,  # 两份文档重叠区域长度
    length_function=len,  # 长度计算函数
    is_separator_regex=False,  # 如果为真:应当被解释为正则表达式,因此不需要转义。如果为假:应当被当作普通字符串分隔符,并转义任何特殊字符。
)
# 方式一 通过中文适用的按字符递归拆分 按字符列表拆分,通过字符数测量块大小
texts = text_splitter.create_documents([state_of_the_union])
print(texts[0])
print(texts[1])
print(texts[2])
print(texts[3])

print("分割线-------------------------------------------------")

# 方法二,不用递归,直接按字符拆分
text_splitter2 = CharacterTextSplitter(separator="\n\n",
                                       chunk_size=200,
                                       chunk_overlap=20,
                                       length_function=len,
                                       is_separator_regex=False, )

texts2 = text_splitter2.create_documents([state_of_the_union])
print(texts2[0])

print("分割线-------------------------------------------------")
# 方法三,通过Token数进行拆分
text_splitter3 = CharacterTextSplitter.from_tiktoken_encoder(
    model_name="gpt-4", chunk_size=10, chunk_overlap=0
)
texts3 = text_splitter3.split_text(state_of_the_union)
print(texts3)

随后因为需要对word文档进行处理(这里我借用了langchain给的Loader,不是直接打开文档)

pip install unstructured

 pip install python-doc

pip install python-docx

运行代码报错,ModuleNotFoundError: No module named 'docx2txt'

pip install docx2txt而后成功(关于这些pip期待与大家交流,因为我也是碰到什么解决什么,或许有更好的解决方案)

示例代码:

from langchain_community.document_loaders import Docx2txtLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = Docx2txtLoader("./files/reform.docx")
pages = loader.load()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=200,
    chunk_overlap=10,
    length_function=len,
    add_start_index=True,
)
texts = text_splitter.split_documents(pages)
print(f'Split the pages in {len(texts)} chunks')
print(texts[0])
print(texts[1])
print(texts[2])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值