docx 文档向量化详细过程

2024-06-09 15:20
文章标签 文档 详细 过程 量化 docx

本文主要是介绍docx 文档向量化详细过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

读取文件

使用的 docx 文档是一个 示例.docx 文档,内容截图如下:

image.png

参数说明

基本的文档处理参数如下:

chunk_overlap = 50
chunk_size = 250
embed_model = 'm3e-large'
vs_type = 'fassi'
zh_title_enhance = False

详细解释如下:

  1. chunk_overlap = 50: chunk_overlap 是指在进行文本分块时,每个块之间的重叠量。在处理文本时,通常将文本分成多个块以便更有效地处理,而重叠量可以确保在相邻的块之间不会丢失重要的信息。在这个例子中,重叠量为 50,表示相邻块之间会有 50 个字符的重叠。

  2. chunk_size = 250chunk_size 是指每个文本块的大小。将长文本分成适当大小的块有助于更高效地处理文本数据。在这里每个文本块的大小为 250 个字符。

  3. embed_model = 'm3e-largeembed_model 是指用于文本嵌入(embedding)的模型。文本嵌入是将文本数据转换成向量的过程,通常用于表示文本数据。在这里,使用了名为 m3e-large 的嵌入模型。

  4. vs_type = 'fassi'vs_type 是向量数据库名称。

  5. zh_title_enhance = Falsezh_title_enhance 是一个布尔值,用于指示是否要增强中文标题。当设置为 True 时,表示对中文标题进行增强处理;当设置为 False 时,表示不进行增强处理。

加载自定义的 Loader 处理 pdf 文件

这里我使用的是自定义的 document_loaders.mydocloader.RapidOCRDocLoader ,处理过程的核心代码如下:

def _get_elements(self) -> List:def doc2text(filepath):from docx.table import _Cell, Tablefrom docx.oxml.table import CT_Tblfrom docx.oxml.text.paragraph import CT_Pfrom docx.text.paragraph import Paragraphfrom docx import Document, ImagePartfrom PIL import Imagefrom io import BytesIOimport numpy as npfrom rapidocr_onnxruntime import RapidOCRocr = RapidOCR()doc = Document(filepath)resp = ""def iter_block_items(parent):from docx.document import Documentif isinstance(parent, Document):parent_elm = parent.element.bodyelif isinstance(parent, _Cell):parent_elm = parent._tcelse:raise ValueError("RapidOCRDocLoader parse fail")for child in parent_elm.iterchildren():if isinstance(child, CT_P):yield Paragraph(child, parent)elif isinstance(child, CT_Tbl):yield Table(child, parent)b_unit = tqdm.tqdm(total=len(doc.paragraphs)+len(doc.tables),desc="RapidOCRDocLoader block index: 0")for i, block in enumerate(iter_block_items(doc)):b_unit.set_description("RapidOCRDocLoader  block index: {}".format(i))b_unit.refresh()if isinstance(block, Paragraph):resp += block.text.strip() + "\n"images = block._element.xpath('.//pic:pic')  # 获取所有图片for image in images:for img_id in image.xpath('.//a:blip/@r:embed'):  # 获取图片idpart = doc.part.related_parts[img_id]  # 根据图片id获取对应的图片if isinstance(part, ImagePart):image = Image.open(BytesIO(part._blob))result, _ = ocr(np.array(image))if result:ocr_result = [line[1] for line in result]resp += "\n".join(ocr_result)elif isinstance(block, Table):for row in block.rows:for cell in row.cells:for paragraph in cell.paragraphs:resp += paragraph.text.strip() + "\n"b_unit.update(1)return resptext = doc2text(self.file_path)from unstructured.partition.text import partition_textreturn partition_text(text=text, **self.unstructured_kwargs)

这里使用了一个叫 Document 的 python 库可以直接提取 docx 文件中的信息,Document 专门用于处理 Microsoft Word 文档。我们这里主要处理的只有两种类型的内容,分别对应 paragraphstables ,处理逻辑如下:

  • paragraphs : 直接将文本提取出来拼接到 resp 后面,如果有图片,则会使用 ocr 技术提取图片中的文字同样拼接到 resp 后面
  • tables:将表格中的每一行文本,从左到右使用换行符 “\n” ,将每一列的数据拼接起来,如下图所示表格,最后拼接的字符串结果如下所示。

image.png

优点
缺点
GEOcoding & CSV export:类似于知识库问答,因为需要返回准确的经纬度
只能查询
Administrative layers&export to QGIS: 与app.ageospatial.com进行数据访问
无法对结果进行操作交互
Population data:与app.ageospatial.com进行数据访问人口数据分布
输入数据格式有限
Sentinel-2 imagery and NDVl(Normalized Difference Vegetation Index) :与app.ageospatial.com进行数据访问卫星影像
依赖于自己的数据,因为都是专业涉密数据,准确性也高
Building data&export to QGIS

最终将所有paragraphstables 中的字符串都拼接起来形成一个长字符串,最后使用一个 partition_text 函数进行了一定的切分,将得到的字符串列表返回即可,其实这一步感觉没啥用处,因为后边其实还使用了ChineseRecursiveTextSplitter 来对长文本进行了递归拆分。

封装

将得到文本进行拆分之后,以方便后续的内容向量化,将上面的结果包装成一个包含了许多 Document 列表,,这些 Document 有利于后续向量化入库,每个 Document 中有 pagecontentmetadata ,前者存放部分文本内容,后者存放该内容的元数据,比如文件位置等等,部分内容展示如下图。

image.png

存入向量库

随便找一个可以使用的向量模型,我这里使用的是 m3e-large ,另外还有找自己合适的向量数据库,我这里使用的是 fassi ,将上面处理好的内容都经过向量化存入 fassi 中,后面结合大模型即可即可进行文档的问答和检索。这里展示了使用我这个文档进行的问答过程。

image.png

那么,我们该如何学习大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、大模型全套的学习路线

学习大型人工智能模型,如GPT-3、BERT或任何其他先进的神经网络模型,需要系统的方法和持续的努力。既然要系统的学习大模型,那么学习路线是必不可少的,下面的这份路线能帮助你快速梳理知识,形成自己的体系。

L1级别:AI大模型时代的华丽登场

L2级别:AI大模型API应用开发工程

L3级别:大模型应用架构进阶实践

L4级别:大模型微调与私有化部署

一般掌握到第四个级别,市场上大多数岗位都是可以胜任,但要还不是天花板,天花板级别要求更加严格,对于算法和实战是非常苛刻的。建议普通人掌握到L4级别即可。

以上的AI大模型学习路线,不知道为什么发出来就有点糊,高清版可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

这篇关于docx 文档向量化详细过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045557

相关文章

使用Dify访问mysql数据库详细代码示例

《使用Dify访问mysql数据库详细代码示例》:本文主要介绍使用Dify访问mysql数据库的相关资料,并详细讲解了如何在本地搭建数据库访问服务,使用ngrok暴露到公网,并创建知识库、数据库访... 1、在本地搭建数据库访问的服务,并使用ngrok暴露到公网。#sql_tools.pyfrom

java导出pdf文件的详细实现方法

《java导出pdf文件的详细实现方法》:本文主要介绍java导出pdf文件的详细实现方法,包括制作模板、获取中文字体文件、实现后端服务以及前端发起请求并生成下载链接,需要的朋友可以参考下... 目录使用注意点包含内容1、制作pdf模板2、获取pdf导出中文需要的文件3、实现4、前端发起请求并生成下载链接使

IDEA连接达梦数据库的详细配置指南

《IDEA连接达梦数据库的详细配置指南》达梦数据库(DMDatabase)作为国产关系型数据库的代表,广泛应用于企业级系统开发,本文将详细介绍如何在IntelliJIDEA中配置并连接达梦数据库,助力... 目录准备工作1. 下载达梦JDBC驱动配置步骤1. 将驱动添加到IDEA2. 创建数据库连接连接参数

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

2025最新版Python3.13.1安装使用指南(超详细)

《2025最新版Python3.13.1安装使用指南(超详细)》Python编程语言自诞生以来,已经成为全球最受欢迎的编程语言之一,它简单易学易用,以标准库和功能强大且广泛外挂的扩展库,为用户提供包罗... 目录2025最新版python 3.13.1安装使用指南1. 2025年Python语言最新排名2.

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

Java中使用注解校验手机号格式的详细指南

《Java中使用注解校验手机号格式的详细指南》在现代的Web应用开发中,数据校验是一个非常重要的环节,本文将详细介绍如何在Java中使用注解对手机号格式进行校验,感兴趣的小伙伴可以了解下... 目录1. 引言2. 数据校验的重要性3. Java中的数据校验框架4. 使用注解校验手机号格式4.1 @NotBl

Python批量调整Word文档中的字体、段落间距及格式

《Python批量调整Word文档中的字体、段落间距及格式》这篇文章主要为大家详细介绍了如何使用Python的docx库来批量处理Word文档,包括设置首行缩进、字体、字号、行间距、段落对齐方式等,需... 目录关键代码一级标题设置  正文设置完整代码运行结果最近关于批处理格式的问题我查了很多资料,但是都没

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar