使用本地大模型从论文PDF中提取结构化信息

1 安装ollama

点击前往网站 https://ollama.com/ ,下载ollama软件,支持win、Mac、linux

2 下载LLM

ollama软件目前支持多种大模型, 如阿里的(qwen、qwen2)、meta的(llama3、llama3.1), 读者根据自己电脑配置下载相应的模型。

以llama3.1为例,根据自己电脑显存性能, 选择适宜的版本。如果不知道选什么,那就试着安装,不合适不能用再删除即可。打开电脑命令行cmd(mac是terminal), 网络是连网状态,执行模型下载(安装)命令

python 复制代码
ollama run llama3.1

3 安装python包

在python中调用ollama服务,需要ollama包。

打开电脑命令行cmd(mac是terminal), 网络是连网状态,执行安装命令

python 复制代码
pip install ollama

4启动ollama服务

在Python中调用本地ollama服务,需要先启动本地ollama服务, 打开电脑命令行cmd(mac是terminal), 执行

python 复制代码
ollama serve

5 设计提示词

该提示存储在scientific_papers_prompt.txt 中

python 复制代码
科学研究论文:
--- 
{document} 
---

您是分析科学研究论文的专家。 请仔细阅读上面提供的研究论文,并提取以下关键信息:

从研究论文中提取以下六 (6) 个属性:
- 论文标题:研究论文的全名
- 出版年份:论文发表的年份
- 作者:论文所有作者的全名
- 作者联系方式:字典列表,其中每个字典包含每个作者的以下键:
  - 姓名:作者的全名
  - 机构:作者的机构隶属关系
  - 电子邮件:作者的电子邮件地址(如果提供)
- 摘要:论文摘要的全文
- 摘要总结:用 2-3 句话简洁地总结摘要,突出重点

指南:
- 提取的信息应属实,并准确无误。
- 除摘要外,应极其简洁,摘要应完整复制。
- 提取的实体应该是独立的,并且不需要论文的其余部分就能轻松理解。
- 如果论文中缺少任何属性,请将该字段留空,而不是猜测。
- 对于摘要总结,重点介绍研究的主要目标、方法和主要发现。
- 对于作者联系方式,请为每个作者创建一个条目,即使缺少一些信息。如果没有提供作者的电子邮件或机构,请在字典中将该字段留空。

以 JSON 格式回答。JSON 应包含 6 个键:"PaperTitle", "PublicationYear", "Authors", "AuthorContact", "Abstract", "SummaryAbstract"。 "AuthorContact"字段应该是字典列表格式。

6 提取信息

python 复制代码
# 从pdf中读取信息以辅助阅读论文
import PyPDF2
import ollama
# 注意版本问题!
# PyPDF2 == 3.0.1
# ollama == 0.3.1
# 读取pdf
# 遍历某个文件夹下的所有pdf文件
def read_pdf_text(filename):
  with open(filename, 'rb') as file:
    # 创建一个PDF阅读器对象
    reader = PyPDF2.PdfReader(file)
    res = []
    # 遍历PDF中的每一页
    for page_num in range(len(reader.pages)):
      # 获取当前页面的文本内容
      text = reader.pages[page_num].extract_text()
      res.append(text)
    return ''.join(res)
def extract_pdf(filename, prompt_content):
    pdf = read_pdf_text(filename=filename)
    prompt_content = open(prompt_content, encoding='utf-8').read()
    response = ollama.chat(model='llama3', 
                       messages = [
                           {'role': 'system', 'content': prompt_content},
                           {'role': 'user', 'content': pdf}
                       ])
    return response['message']['content']
print(extract_pdf(filename='prompts/Mobile Payment Adoption.pdf', prompt_content='prompts/scientific_papers_prompt.txt'))

上述代码分为两部分,首先使用read_pdf_text() 读取pdf文档,并转化为字符串格式。然后将其与提示词文件scientific_papers_prompt.txt输入LLM模型中,并打印出结果:

相关推荐
wangchunyu1149 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
2501_9445215911 小时前
Immer 跨端三方库仓颉适配全流程
python·eclipse·django
信誓旦旦的程序猿11 小时前
【Python量化实战宝典 #26】止损与回撤控制手册:移动止损、最大回撤(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
2501_9445215911 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
Patrick在香港11 小时前
同一行 strftime,两台机器跑出两种日期
python·datetime·时区·locale·日期处理
2601_9679873711 小时前
用Python+OpenCV+YOLO写个游戏脚本:从自动瞄准到自动采集的保姆级教程
python·opencv·yolo·目标检测·游戏自动化
meiying883811 小时前
快递单号批量查询Python脚本:从手动到自动化的完整实现
开发语言·python·自动化
人工智能导论实践课11 小时前
【GUI桌面开发3】PyCharm配置外部工具
ide·python·pycharm
一千柯橘12 小时前
LangChain 的实时输出处理: stream_events 和 Streaming
python·langchain·agent
贾公子12 小时前
图片 AIGC 检测接入实战——URL 与 Base64 的取舍、体积校验与「你送过去的可能不是那张图」
python·aigc