利用 langchain 和 LLM 来给 PDF 做总结

在网上看到一个PDF, 讲的是 Gstreamer 的的动态管道的构建, 一瞥而过, 没时间细看, 先写个小程序通过 langchain 和 LLM 给它做个快速总结

代码如下

from langchain.document_loaders import UnstructuredPDFLoader
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# 加载 PDF 文件
pdf_loader = UnstructuredPDFLoader("path_to_your_pdf_file.pdf")
documents = pdf_loader.load()

# 获取 PDF 的纯文本内容
pdf_text = ' '.join([doc.page_content for doc in documents])

# 创建 LLM 对象 (使用 OpenAI GPT)
llm = OpenAI(temperature=0.7, openai_api_key="your_openai_api_key")

# 定义总结的 Prompt
prompt_template = """
请总结以下内容:
{pdf_text}
总结:
"""

prompt = PromptTemplate(
    input_variables=["pdf_text"],
    template=prompt_template,
)

# 创建 LLMChain
chain = LLMChain(llm=llm, prompt=prompt)

# 使用 LLM 生成总结
summary = chain.run(pdf_text)
print("PDF 总结:\n", summary)

代码输出如下

PDF summary:
 总结内容:

1. **演讲者信息**:
   - 演讲者:José Antonio Santos Cadenas
   - 职位:软件工程师
   - 教育背景:Telematic Systems 硕士
   - 工作经历:Kurento Media Server (KMS) 管理员
   - 联系方式:santoscadenas@gmail.com

2. **GStreamer 静态管道**:
   - 使用 `gst-launch` 命令创建复杂的媒体管道,例如将视频文件转码。
   - 示例:`gst-launch-1.0 filesrc location=sample.mp4 ! qtdemux ! avdec_h264 ! queue ! vp8enc ! webmmux ! filesink location=sample.webm`

3. **GStreamer 动态元素**:
   - GStreamer 提供了一些动态元素(如 `autovideosrc`, `autovideosink`, `decodebin`, `playbin`),简化了动态管道的创建。
   - 示例:`gst-launch-1.0 filesrc location=sample.mp4 ! decodebin ! vp8enc ! webmmux ! filesink location=sample.webm`

4. **动态管道不依赖于媒体**:
   - 动态管道可以根据媒体流而不是外部条件创建。
   - 例如:根据用户操作添加或替换元素。

5. **创建动态管道的要求**:
   - 需要深入理解 GStreamer 的工作原理,包括媒体如何在 pads 之间流动、协商如何进行、流线程如何工作以及 probes 如何工作。

6. **在播放时添加和移除元素**:
   - 错误方式:直接调用 `gst_pad_unlink`,可能导致死锁或竞争条件。
   - 正确方式:使用 probe 等待 pad 空闲,确保在断开连接时不会影响媒体流。

7. **在 tee 后添加元素**:
   - tee 会处理断开的 pads,但建议在 idle 或 block 回调中处理元素连接,以避免状态更改或协商期间的问题。

8. **注意协商**:
   - 在 tee 后连接元素时,需要注意协商可能会影响其他分支,建议使用 `capsfilter` 或转换器来简化协商。

9. **移除元素**:
   - 有时需要允许元素处理所有队列中的缓冲区(例如录制时),断开连接后需要发送 EOS 并等待管道末端处理。

10. **实时管道建议**:
    - 在实时管道中,元素应配置为尽可能快地工作,并添加队列以分离不同线程中的处理。

11. **总结建议**:
    - 动态管道不容易,理解要尝试的操作及其对管道其他部分的影响。
    - 断开连接前阻塞 pads,连接前同步新元素的状态,始终先连接 sink 元素以避免媒体泄漏。

12. **联系方式和资源**:
    - 演讲者邮箱:santoscadenas@gmail.com
    - Kurento 相关链接:[Kurento](http://www.kurento.org), [GitHub](http://www.github.com/kurento), [Twitter](https://twitter.com/kurentoms)
    - 其他相关组织:[NUBOMEDIA](http://www.nubomedia.eu), [FI-WARE](http://www.fi-ware.org), [EU](http://ec.europa.eu)

代码解释

这段代码的作用是从 PDF 文件中提取文本内容,并使用 OpenAI 的 GPT 模型对其进行总结。以下是各部分的解释:

1. 导入必要的库

from langchain.document_loaders import UnstructuredPDFLoader
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
  • UnstructuredPDFLoader: 用于加载和解析 PDF 文件,将其转换为文本格式。
  • OpenAI: 用于与 OpenAI 的 GPT 模型进行交互,生成自然语言的输出。
  • LLMChain: 用于将模型与输入的提示(prompt)结合起来,创建一个完整的流程链。
  • PromptTemplate: 用于定义向 GPT 提供的提示模板。

2. 加载 PDF 文件

pdf_loader = UnstructuredPDFLoader("path_to_your_pdf_file.pdf")
documents = pdf_loader.load()
  • UnstructuredPDFLoader: 用来加载 PDF 文件。它会解析 PDF 并将其转换成文档对象列表,每个文档对象包含了对应的页面内容。
  • documents : 加载后的 PDF 文件内容存储在 documents 列表中,每个文档对象对应一页 PDF 文本。

3. 提取 PDF 文本

pdf_text = ' '.join([doc.page_content for doc in documents])
  • pdf_text: 从文档对象中提取纯文本内容,将每一页的内容拼接在一起,生成完整的 PDF 文本。

4. 创建 OpenAI LLM 对象

llm = OpenAI(temperature=0.7, openai_api_key="your_openai_api_key")
  • OpenAI : 实例化 GPT 模型,temperature=0.7 设置了生成文本的随机性,较高的值会导致模型生成更多样化的输出。需要使用 OpenAI 的 API 密钥来访问 GPT 服务。

5. 定义 Prompt 模板

prompt_template = """
请总结以下内容:
{pdf_text}
总结:
"""
  • prompt_template : 定义了一个自然语言提示模板,包含一个占位符 {pdf_text},用于替换成提取的 PDF 文本。该模板告诉 GPT 模型对 PDF 内容进行总结。

    prompt = PromptTemplate(
    input_variables=["pdf_text"],
    template=prompt_template,
    )

  • PromptTemplate : 创建一个具体的提示模板,指定 pdf_text 作为输入变量。

6. 创建 LLMChain

chain = LLMChain(llm=llm, prompt=prompt)
  • LLMChain: 将 GPT 模型和定义好的提示模板连接起来,形成一个可执行的链,链条会根据提示和模型生成输出。

7. 生成总结

summary = chain.run(pdf_text)
print("PDF 总结:\n", summary)
  • chain.run(pdf_text): 执行链,将提取的 PDF 文本传递给 LLM,GPT 模型根据提供的 prompt 对 PDF 文本进行总结。
  • print("PDF 总结:\n", summary): 打印生成的总结。

总结

该代码从 PDF 文件中提取纯文本内容,使用 OpenAI GPT 模型对其进行总结。你可以通过修改 prompt 或调整模型的参数来生成不同风格的总结。

你可以将此代码应用于任何 PDF 文件,得到简明的总结内容。


本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

相关推荐
m0_748241239 小时前
ElasticPDF-新国产 PDF 编辑器开发框架(基于 pdf.js Web PDF批注开发,实现高亮多边形橡皮擦历史记录保存注释文字)
前端·pdf·编辑器
ComPDFKit10 小时前
开源 JS PDF 库比较
pdf
杨浦老苏10 小时前
开源PDF翻译工具PDFMathTranslate
人工智能·docker·ai·pdf·群晖·翻译
LostSpeed15 小时前
在福昕(pdf)阅读器中导航到上次阅读页面的方法
pdf
旭久15 小时前
SpringBoot的Thymeleaf做一个可自定义合并td的pdf表格
pdf·html·springboot
神色自若1 天前
Net9为PDF文字替换,使用Spire.PDF版本10.12.4.1360
pdf
机器懒得学习2 天前
解析交通事故报告:利用 PDF、AI 与数据标准化技术构建智能分析系统
pdf
合合技术团队2 天前
高效准确的PDF解析工具,赋能企业非结构化数据治理
人工智能·科技·pdf·aigc·文档
jingling5552 天前
如何使用免费资源--知网篇
开发语言·经验分享·搜索引擎·pdf·开源
haha_qasim2 天前
怎么将pdf中的某一个提取出来?介绍几种提取PDF中页面的方法
前端·pdf