ChatGPT | 分割Word文字及表格,优化文本分析

这篇具有很好参考价值的文章主要介绍了ChatGPT | 分割Word文字及表格,优化文本分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

知识库读取Word内容时,由于embedding切片操作,可能会出现表格被分割成多个切片的情况。这种切片方式可能导致“列名栏”和“内容栏”之间的Y轴关系链断裂,从而无法准确地确定每一列的数据对应关系,从而使得无法准确知道每一列的数据汇总。

用下面表格为例子:

级数

T1

T2

T3

T4

T5

T6

T7

子等

T1.1-1.2

T2.1-2.2

T3.1-3.3

T4.1-4.3

T5.1-5.2

T6.1-6.2

T7

专业名称

实习

工程师

助理

工程师

工程师

高级

工程师

资深

工程师

专家级

工程师

首席

工程师

学历

本科及以上

本科及以上

本科及以上

本科及以上

本科及以上

硕士及以上

硕士及以上

工作经验

1年以内(兼职)

1-3年

3-5年

5-8年

8-10年

10-15年

15年以上

级数

T1

T2

T3

T4

T5

T6

T7

子等

T1.1-1.2

T2.1-2.2

T3.1-3.3

T4.1-4.3

T5.1-5.2

T6.1-T6.2

T7

专业名称

实习

工程师

助理

工程师

工程师

高级

工程师

资深

工程师

专家级

工程师

首席

工程师

分值

60-64分

65-69分

70-79分

80-89分

90-94分

95-97分

98-100分

直接演示一下本文代码运行的对比结果,分别展示“无优化”和“有优化”的问答结果,标绿框的是回答错误的:

ChatGPT | 分割Word文字及表格,优化文本分析,ChatGPT,langchain,python,chatgpt,word,知识库

本文帮助提高文本处理和向量化的效率,以下是对每个步骤的详细说明,详见md_embedding.py源码:

  1. 分离文字和表格:将原始Word文档中的文字内容和表格分开保存。将文字内容保存为纯文本的Markdown文件,而将表格单独保存为多个只包含Markdown表格的Markdown文件。例如,一个Word文档包含2个表格,即生成1个纯文字Markdown文件,2个纯表格的Markdown文件。
  2. 切片并向量化处理:对于多个Markdown文件,按照固定的大小切片,确保切片大小是大于Markdown表格的体积,以确保包含完整的表格。然后对这些切片进行向量化处理。

这种方法的优点是能够有效地分离文字和表格,并通过切片和向量化处理提高处理效率。通过将表格转化为向量表示,可以更方便地进行后续的计算和分析。同时,由于切片时保证了表格的完整性,可以避免表格被切断导致信息丢失的问题。

有优化的embedding的源码, md_embedding.py 如下:

import os
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import DirectoryLoader
from langchain.document_loaders import UnstructuredFileLoader
from langchain.document_loaders import UnstructuredWordDocumentLoader

from docx import Document



def convert_word_tables_to_markdown(file_path, output_folder):
    def convert_table_to_markdown(table):
        markdown = ""
        for row in table.rows:
            cells = [cell.text.replace('\n', '').replace('|', '|') for cell in row.cells]
            markdown += "|".join(cells) + "|\n"
        return markdown

    doc = Document(file_path)
    
    # 创建输出文件夹(如果不存在)
    os.makedirs(output_folder, exist_ok=True)
    
    # 将每个表格转换为Markdown并保存为单独的TXT文件
    for i, table in enumerate(doc.tables):
        markdown = convert_table_to_markdown(table)

        filename_without_ext=os.path.splitext(os.path.basename(file_path))[0]
        # 将Markdown表格写入TXT文件
        output_file_path = os.path.join(output_folder, filename_without_ext+f"_output_{i+1}.md")
        with open(output_file_path, "w", encoding='utf-8') as file:
            file.write(markdown)
            
    return output_folder



def remove_tables_save_as_md(file_path, output_file_path):
    doc = Document(file_path)
    
    # 移除所有表格
    for table in doc.tables:
        table._element.getparent().remove(table._element)

    # 获取剩余内容的纯文本,并构建Markdown格式字符串
    content = [p.text.strip() for p in doc.paragraphs if p.text.strip()]
    markdown_content = '\n\n'.join(content)

    # 保存为MD文件
    with open(output_file_path, 'w', encoding='utf-8') as file:
        file.write(markdown_content)
        
    return output_file_path


abs_docx_path='D:\CloudDisk\OpenAI\博客的源码\Docx表格优化\带表格DOCX.docx'
embedding_folder_path=os.path.dirname(abs_docx_path)+'\\md_txt'
os.makedirs(embedding_folder_path,exist_ok=True)

convert_word_tables_to_markdown(abs_docx_path,embedding_folder_path)
remove_tables_save_as_md(abs_docx_path,embedding_folder_path+'\\'+os.path.basename(abs_docx_path)+'.md')


# 1 定义embedding
embeddings = OpenAIEmbeddings(openai_api_key='aaaaaaaaaaaaaaaaaa',
                              openai_api_base='bbbbbbbbbbbbbbbbbbbbbbbbbb',
                              openai_api_type='azure',
                              model="text-embedding-ada-002",
                              deployment="lk-text-embedding-ada-002",
                              chunk_size=1)

# 2 定义文件 
loader = DirectoryLoader(embedding_folder_path, glob="**/*.md")
pages = loader.load_and_split()

# 按固定尺寸切分段落
text_splitter_RCTS = RecursiveCharacterTextSplitter(
    chunk_size = 500,
    chunk_overlap = 100
)

split_docs_RCTS = text_splitter_RCTS.split_documents(pages)
for item in split_docs_RCTS:
    print(item)
    print('')

#写入向量数据库
print(f'写入RCTS向量数据库')
vectordb = Chroma.from_documents(split_docs_RCTS, embedding=embeddings, persist_directory="./MD_RCTS/")
vectordb.persist()

 无优化的embedding的源码,docx_embedding.py 如下:

import os
from langchain.embeddings import OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.document_loaders import UnstructuredWordDocumentLoader

# 1 定义embedding
embeddings = OpenAIEmbeddings(openai_api_key='aaaaaaaaaa',
                              openai_api_base='bbbbbbbbbbb',
                              openai_api_type='azure',
                              model="text-embedding-ada-002",
                              deployment="lk-text-embedding-ada-002",
                              chunk_size=1)

docx_file_path="D:\CloudDisk\OpenAI\博客的源码\Docx表格优化\带表格DOCX.docx"

# 2 定义文件 
loader = UnstructuredWordDocumentLoader(docx_file_path)
pages = loader.load_and_split()

# 按固定尺寸切分段落
text_splitter_RCTS = RecursiveCharacterTextSplitter(
    chunk_size = 500,
    chunk_overlap = 100
)

split_docs_RCTS = text_splitter_RCTS.split_documents(pages)
for item in split_docs_RCTS:
    print(item)
    print('')

#写入向量数据库
print(f'写入RCTS向量数据库')
vectordb = Chroma.from_documents(split_docs_RCTS, embedding=embeddings, persist_directory="./Word_RCTS/")
vectordb.persist()
 

 问答测试 chat_qa.py:文章来源地址https://www.toymoban.com/news/detail-612333.html

import time
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.chat_models import AzureChatOpenAI

  
def getQuestionList():
    question_list=[
    '级数=T6,专业名称是?',
    '要求硕士学历有哪些级数?',
    '分值大于等于70是哪些级数?',
    '可以兼职的是什么级数?',
    '需要工作经验满5年以上是哪些专业?',
    '首席工程师要求什么学历,工作经验多少年',
    '自上而下的原则,是指?',
    '现场答辩,是指?',
    '级数=T3,专业名称是?',
    '级数=T4,专业名称是?',
    ]

    return question_list

embeddings = OpenAIEmbeddings(openai_api_key='aaaaaaaaaaaaaaaaa',
                              openai_api_base='bbbbbbbbbbbbbbbbbbbbbbb',
                              openai_api_type='azure',
                              model="text-embedding-ada-002",
                              deployment="lk-text-embedding-ada-002",
                              chunk_size=1)


openAiLLm = AzureChatOpenAI(openai_api_key='aaaaaaaaaaaaaaaaaaaaaaaaaaaa', #注意这里,不同 API_BASE 使用不同 APK_KEY
                              openai_api_base="bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
                              openai_api_version='2023-03-15-preview',
                              deployment_name='lk-gpt-35-turbo-16k',
                              temperature=0.9,
                              model_name="gpt-35-turbo-16k",
                              max_tokens=300)

print('------r---r---r----')

word_RTCS = Chroma(persist_directory="./Word_RCTS/", embedding_function=embeddings)
word_qa = RetrievalQA.from_chain_type(llm=openAiLLm,chain_type="stuff",retriever=word_RTCS.as_retriever(),return_source_documents = False) 

md_RTCS = Chroma(persist_directory="./MD_RCTS/", embedding_function=embeddings)
md_qa = RetrievalQA.from_chain_type(llm=openAiLLm,chain_type="stuff",retriever=md_RTCS.as_retriever(),return_source_documents = False)

#print(qa_RTCS)#查看自定义Prompt的结构体内容
for i in range(0,len(getQuestionList())):
    question_text=getQuestionList()[i]
    
    # 进行问答
    wordchat = word_qa({"query": question_text}) 
    wordquery = str(wordchat['query'])
    wordresult = str(wordchat['result'])
    
    print("问题: ",wordquery)
    print("无优化-结果:",wordresult)
    time.sleep(1)#每次提问间隔1s
    
    
    csvchat = md_qa({"query": question_text}) 
    csvquery = str(csvchat['query'])
    csvresult = str(csvchat['result'])
    #print("MD问题: ",csvquery)
    print("有优化-结果:",csvresult)
    print('----------------------------------------')

    time.sleep(1)#每次提问间隔1s
    

到了这里,关于ChatGPT | 分割Word文字及表格,优化文本分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自然语言处理从入门到应用——LangChain:索引(Indexes)-[文本分割器(Text Splitters)]

    分类目录:《大模型从入门到应用》总目录 LangChain系列文章: 基础知识 快速入门 安装与环境配置 链(Chains)、代理(Agent:)和记忆(Memory) 快速开发聊天模型 模型(Models) 基础知识 大型语言模型(LLMs) 基础知识 LLM的异步API、自定义LLM包装器、虚假LLM和人类输入LLM(

    2024年02月12日
    浏览(33)
  • 使用poi-tl向word插入图片、文本、表格行循环

    工作中难免会向word中操作数据,本文主要介绍poi-tl的使用,先来看效果图 核心介绍: 标签 1、插入文本标签 : {{var}} 2、插入图片标签: {{@var}} 操作步骤: 1、引入依赖 2、Java核心代码 官方网址:http://deepoove.com/poi-tl/ 1、准备模版,定义好需要的标签 2、查询模版 3、获取需要填

    2024年02月05日
    浏览(77)
  • ChatGPT 之 LangChain的文本切割方法对比

    本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! ChatGPT面向对话格式的文本理解很好,但如果要把网络上的文章让ChatGPT直接分析则会有格式的问题。文本清洗是个大课题,讲起来需要很多篇幅,优化起来前路漫漫。 本文基于稍微加工后的文本内容,使用LangChain的Char

    2024年02月09日
    浏览(20)
  • wps/word 如何让表格的标题和表格名称文本(表1-1 xxx)跨页显示(已解决)

    打开wps   创建一个跨页的表格表格,如下图 大家都知道 表格标题跨页  就是1)在菜单表格工具 点击重复标题   或者 2)表格属性--》行--》在各页顶端以标题行形式出现,详细如下图。 1) 第一种方法,点击表格 第二种方法: 点击表格 --》右键----》表格属性     如下图

    2024年02月07日
    浏览(74)
  • Python自动化小技巧18——自动化资产月报(word设置字体表格样式,查找替换文字)

    案例背景 每月都要写各种月报,经营管理月报,资产月报.....这些报告文字目标都是高度相似的,只是需要替换为每个月的实际数据就行,如下:   (打码是怕信息泄露.....) 可以看到,这个报告的都是高度模板化,我们只需要对里面的某些文字进行替换,例如2023年7月换成2

    2024年02月12日
    浏览(38)
  • c++ word简单的写文本与画表格只支持docx

    简单使用的代码如下所示: #include \\\"stdafx.h\\\" #include windows.h #include \\\"minidocx.hpp\\\" using namespace docx; using namespace std; std::string GB2312ToUTF8(const std::string gb2312) {     int len = MultiByteToWideChar(CP_ACP, 0, gb2312.c_str(), -1, NULL, 0);     wchar_t* wstr = new wchar_t[len + 1];     memset(wstr, 0, len + 1);     M

    2024年02月12日
    浏览(26)
  • element ui表格showOverflowTooltip文字过长优化方案

    在 table 组件展示数据时,对于文本过长的单元格添加 show-overflow-tootip 属性后,tooltip 的宽度会撑满屏幕 从 DOM 节点可以看到,当鼠标进入 show-overflow-tooltip 属性作用的单元格时,body 下会多一个 class 为 el-tooltip__popper 的节点,这个节点就是真实的 tooltip 的 DOM 看来,一种非常直

    2023年04月22日
    浏览(20)
  • ChatGPT+Word的智能化文字生成和应用

    在Word中引入OpenAI代码需要使用VBA编辑器。以下是在Word中引入OpenAI代码的步骤: 打开Word文档,按下Alt + F11键打开VBA编辑器。 在VBA编辑器中,选择“插入”菜单,然后选择“模块”。 在新建的模块中,将OpenAI代码粘贴到模块中。 保存模块并关闭VBA编辑器。 在Word文档中,选择

    2024年02月02日
    浏览(25)
  • 【LangChain】如何本地部署基于chatGPT的实时文档和表格数据的助手,在自己的数据上构建chatGPT?

    (1) LangChain 是一个用于自然语言处理的 Python 库,它的目标是尝试简化自然语言处理任务,提高处理效率和准确性。 该库提供了一组易于使用的函数和工具,可以帮助你实现各种自然语言处理任务,例如语句分割、分词、词性标注、命名实体识别、情感分析等。与其它自然

    2024年02月08日
    浏览(25)
  • LLMs之RAG:基于LangChain框架利用ChatGPT的API实现一个与在线网页交互的对话机器人—五大思路步骤—加载文档WebBaseLoader网址文件→文档分割(chunk_size=50

    LLMs之RAG:基于LangChain框架利用ChatGPT的API实现一个与在线网页交互的对话机器人—五大思路步骤—加载文档WebBaseLoader网址文件→文档分割(chunk_size=500)→文本嵌入化(OpenAIEmbeddings)并存储到向量库(Chroma)→构造Prompt(拉取一个对象并将其返回为 LangChain对象)→定义LLMs(ChatOpenAI)→输入

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包