【AIGC】通过人工智能总结PDF文档摘要服务的构建

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: 【5月更文挑战第9天】使用Python和预训练的AI模型,结合Gradio前端框架,创建了一个文本及PDF摘要聊天机器人。通过加载"FalconsAI/text_summarization"模型,实现文本和PDF的预处理,包括PDF合并与文本提取。聊天机器人接收用户输入,判断是文本还是PDF,然后进行相应的摘要生成。用户可以通过运行`app.py`启动机器人,访问`localhost:7860`与之交互,快速获取内容摘要。这个工具旨在帮助忙碌的人们高效获取信息。

[toc]


我们生活在一个快速发展的社会中,每个人都在奔跑!我们似乎总是没有时间阅读、了解自己和享受一些高质量的内容。在这种氛围中,我们只能希望有什么东西能帮上忙,而这个东西可以是人工智能。

构建聊天界面以汇总文本和 PDF,我们可以快速利用我们的 python 知识来实现和部署文本摘要聊天机器人,使用预训练的 AI 模型和前端框架 gradio。

1.实现模型加载

首先,我们在 python 脚本中导入pipeline,负责加载和调用 AI 模型:

from transformers import pipeline

model_checkpoint = "FalconsAI/text_summarization"
summarizer = pipeline("summarization", model=model_checkpoint)

我们选择了一个相对较小的模型。

2.定义预处理函数

如果它们被批量上传,则合并 pdf......

def merge_pdfs(pdfs: list):
    merger = PdfMerger()
    for pdf in pdfs:
        merger.append(pdf)
    merger.write(f"{pdfs[-1].split('.')[0]}_results.pdf")
    merger.close()
    return f"{pdfs[-1].split('.')[0]}_results.pdf"

将合并的 pdf 转换为大小合适的文本字符串:

def pdf2string(pdfpath):
    loader = PyPDFLoader(pdfpath)
    documents = loader.load()

    ### Split the documents into smaller chunks for processing
    text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
    texts = text_splitter.split_documents(documents)
    fulltext = ""
    for text in texts:
        fulltext += text.page_content+"\n\n\n"
    return fulltext

现在我们已经实现了预处理功能,让我们用 Gradio 设计我们的聊天机器人。

3.构建对话机器人

我们想要一个管理聊天记录的函数,将文本消息与pdf文档分开,代码如下:

def add_message(history, message):
    if len(message["files"]) > 0:
        history.append((message["files"], None))
    if message["text"] is not None and message["text"] != "":
       history.append((message["text"], None))
    return history, gr.MultimodalTextbox(value=None, interactive=False)

返回history包含如下内容:

  • 上传文件的路径元组(如下所示:“/path/to/file1.pdf”、“path/to/file2.pdf...”))和 None(表示来自聊天机器人的消息,尚未写入)
  • 包含我们消息的文本字符串(例如:“In this article, we will see why cats are so overwhelmingly cute...”)和None(代表来自聊天机器人的消息,尚未编写)

让我们看看如何使用历史记录来生成文本:

def bot(history):
    global histr
    if not history is None:
        if type(history[-1][0]) != tuple:
            text = history[-1][0]
            response = summarizer(text, max_length=int(len(text.split(" "))*0.5), min_length=int(len(text.split(" "))*0.05), do_sample=False)[0]
            response = response["summary_text"]
            history[-1][1] = ""
            for character in response:
                history[-1][1] += character
                time.sleep(0.05)
                yield history
        if type(history[-1][0]) == tuple:
            filelist = []
            for i in history[-1][0]:
                filelist.append(i)
            finalpdf = merge_pdfs(filelist)
            text = pdf2string(finalpdf)
            response = summarizer(text, max_length=int(len(text.split(" "))*0.5), min_length=int(len(text.split(" "))*0.05), do_sample=False)[0]
            response = response["summary_text"]
            history[-1][1] = ""
            for character in response:
                history[-1][1] += character
                time.sleep(0.05)
                yield history
    else:
        history = histr
        bot(history)

正如你所看到的,我们检查历史中最后一个元组的第一个元素(history[-1][0])是否是一个元组:

  • 如果它是一个元组,我们将所有 pdf 合并到其中,将它们转换为字符串,并将文本通过管道传递到摘要器,作为输出,返回一个文本,其中包含原始文档中少于 50% 但超过 5% 的单词
  • 如果是文本字符串,我们直接汇总该字符串。

我们将输出摘要流式传输为聊天机器人响应

现在构建多模态聊天机器人:

with gr.Blocks() as demo:
    chatbot = gr.Chatbot(
        [[None, "Hi, I'm **ai-summarizer**, your personal summarization assistant"]],
        label="ai-summarizer",
        elem_id="chatbot",
        bubble_full_width=False,
    )

    chat_input = gr.MultimodalTextbox(interactive=True, file_types=["pdf"], placeholder="Enter message or upload file...", show_label=False)

    chat_msg = chat_input.submit(add_message, [chatbot, chat_input], [chatbot, chat_input])
    bot_msg = chat_msg.then(bot, chatbot, chatbot, api_name="bot_response")
    bot_msg.then(lambda: gr.MultimodalTextbox(interactive=True), None, [chat_input])

启动函数

demo.queue()

if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", share=False)

执行app.py

python3 app.py

模型加载完毕之后,在 localhost:7860 上能够看到聊天机器人,现在我们的摘要助手正在工作了,我们可以通过它来总结我们的文档了!

小结

本节我们学习了基于AI对PDF文件学习汇总,希望对初学者有所帮助。

小编是一名热爱人工智能的专栏作者,致力于分享人工智能领域的最新知识、技术和趋势。这里,你将能够了解到人工智能的最新应用和创新,探讨人工智能对未来社会的影响,以及探索人工智能背后的科学原理和技术实现。欢迎大家点赞,评论,收藏,让我们一起探索人工智能的奥秘,共同见证科技的进步!

目录
相关文章
|
4天前
|
存储 运维 安全
《VERICUT 9.X电脑配置要求与安装说明(官方)》—— PDF文档
本文档详细介绍了 CGTech Vericut 9.X 的安装指南,涵盖安装前准备、安装流程、系统要求、故障排除、许可证配置及多种接口配置等内容,为用户提供全面的软件安装与配置指导。
21 2
|
5月前
|
存储 自然语言处理 API
通义万相AIGC技术Web服务体验评测
随着人工智能技术的不断进步,图像生成技术已成为创意产业的一大助力。通义万相AIGC技术,作为阿里云推出的一项先进技术,旨在通过文本到图像、涂鸦转换、人像风格重塑及人物写真创建等功能,加速艺术家和设计师的创作流程。本文将详细评测这一技术的实际应用体验。
200 4
|
1月前
|
API C#
在.NET中使用QuestPDF高效地生成PDF文档
在.NET中使用QuestPDF高效地生成PDF文档
|
3月前
|
人工智能 自然语言处理 前端开发
基于ChatGPT开发人工智能服务平台
### 简介 ChatGPT 初期作为问答机器人,现已拓展出多种功能,如模拟面试及智能客服等。模拟面试功能涵盖个性化问题生成、实时反馈等;智能客服则提供全天候支持、多渠道服务等功能。借助人工智能技术,这些应用能显著提升面试准备效果及客户服务效率。 ### 智能平台的使用价值 通过自动化流程,帮助用户提升面试准备效果及提高客户服务效率。 ### 实现思路 1. **需求功能设计**:提问与接收回复。 2. **技术架构设计**:搭建整体框架。 3. **技术选型**:示例采用 `Flask + Template + HTML/CSS`。 4. **技术实现**:前端界面与后端服务实现。
|
4月前
|
机器人 C# 人工智能
智能升级:WPF与人工智能的跨界合作——手把手教你集成聊天机器人,打造互动新体验与个性化服务
【8月更文挑战第31天】聊天机器人已成为现代应用的重要组成部分,提供即时响应、个性化服务及全天候支持。随着AI技术的发展,聊天机器人的功能日益强大,不仅能进行简单问答,还能实现复杂对话管理和情感分析。本文通过具体案例分析,展示了如何在WPF应用中集成聊天机器人,并通过示例代码详细说明其实现过程。使用Microsoft的Bot Framework可以轻松创建并配置聊天机器人,增强应用互动性和用户体验。首先,需在Bot Framework门户中创建机器人项目并编写逻辑。然后,在WPF应用中添加聊天界面,实现与机器人的交互。
127 0
|
4月前
|
C# 开发者 Windows
WPF与PDF文档:解锁创建和编辑PDF文件的新技能——从环境配置到代码实践,手把手教你如何在WPF应用中高效处理PDF,提升文档管理效率
【8月更文挑战第31天】随着数字文档的普及,PDF因跨平台兼容性和高保真度成为重要格式。WPF虽不直接支持PDF处理,但借助第三方库(如iTextSharp)可在WPF应用中实现PDF的创建与编辑。本文通过具体案例和示例代码,详细介绍了如何在WPF中集成PDF库,并展示了从设计用户界面到实现PDF创建与编辑的完整流程。不仅包括创建新文档的基本步骤,还涉及在现有PDF中添加页眉页脚等高级功能。通过这些示例,WPF开发者可以更好地掌握PDF处理技术,提升应用程序的功能性和实用性。
179 0
|
4月前
|
开发框架 前端开发 JavaScript
在Winform分页控件中集成导出PDF文档的功能
在Winform分页控件中集成导出PDF文档的功能
|
4月前
[PDF提取重命名]提取识别文字并对PDF文件批量重命名,提取PDF指定可复制的内容并批量重命名PDF,批量PDF文档指定识别提取区域
本文介绍一款实用工具,能快速从可复制内容的PDF中提取指定区域信息并据此重命名文件。设置提取坐标及导入PDF文档、设定新文件名后启动提取流程,即可高效批量处理。保存坐标设置以便重复使用,适用于需频繁修改大量PDF文件名的场景。
453 0
[PDF提取重命名]提取识别文字并对PDF文件批量重命名,提取PDF指定可复制的内容并批量重命名PDF,批量PDF文档指定识别提取区域
|
5月前
|
机器学习/深度学习 人工智能 搜索推荐
人工智能在医疗领域的应用:重塑医疗服务的未来
【7月更文挑战第26天】人工智能正在深刻改变医疗领域,为医疗服务的提升和医学研究的推动注入了新的活力。随着技术的不断进步和应用范围的扩大,我们有理由相信,在不久的将来,人工智能将为我们带来更加精准、高效的医疗服务,让人类健康事业更加繁荣昌盛。作为开发者和医疗工作者,我们应当积极拥抱这一变革,共同推动人工智能在医疗领域的广泛应用和发展。
|
5月前
|
JavaScript Java
Java 将Markdown文件转换为Word和PDF文档
【7月更文挑战第5天】Java中使用`Spire.Doc for Java`库可方便地将Markdown转换为Word或PDF。基本步骤包括导入模块,创建`Document`对象,加载Markdown文件,然后保存为目标格式(`.docx`或`.pdf`)。若遇到`Invalid UTF-8 stream`错误,需确保Markdown文件是UTF-8无BOM编码。页面设置可通过`PageSetup`类调整。注意,实际应用会依据具体需求和环境有所调整。
325 6

热门文章

最新文章

下一篇
DataWorks