使用本地大模型从论文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模型中,并打印出结果:

相关推荐
大鳥1 小时前
深入理解数据结构:数组、链表与列表
数据结构·python·链表
赵钰老师2 小时前
遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR
pytorch·python·深度学习·目标检测·机器学习·cnn·transformer
阿猿先森2 小时前
Python获取当前系统中可用的串口设备
linux·网络·python
数据小小爬虫2 小时前
如何利用Python爬虫获得1688按关键字搜索商品
开发语言·爬虫·python
右恩2 小时前
【二维码美化】
服务器·前端·python·学习
QXH2000002 小时前
数据分析实战—玻璃类别分类
python·机器学习·分类·数据挖掘·数据分析
FBI78098045943 小时前
利用API接口优化电商平台的用户体验
大数据·服务器·网络·数据库·人工智能·python
Sherry Wangs3 小时前
API开发:Flask VS FastAPI
后端·python·fastapi
Python之栈4 小时前
GitHub年度报告发布!Python首次超越JavaScript
javascript·python
宇梵文书C4 小时前
在CFFF云平台使用llama-factory部署及微调Qwen2.5-7B-Instruct
llm·llama·cfff