如何用AI 生成论文/书籍的摘要

         不知道大家是否有这样的感觉,上网浏览信息,看到好的文章就兴奋地下载了下来,文件的名称通常是一串奇奇怪怪的字符串。过了几天就在电脑中找不着了。没有网络上搜索不到的文章,而是在你的电脑中却找不到它们。几年下来,辛辛苦苦收集的技术文档,书籍成了电脑中的垃圾堆。一个治学严谨的信息收纳狂也许会迅速地整理自己的文件夹。更换文件名,分门别类地存储下载文档。但是我不会。AI 出现后,是否能帮我做个电脑文件整理助手呢?我一直想做这件事情。这几天有空,就尝试写一个python小程序。

麻烦存在于细节中

许多事情想想容易,一动手就发现问题没想象的简单。下载的文档包括下面几种

  • 论文

   网络上下载的论文比较简单,它在开头包含了一个摘要,只要通过AI 大模型提取出来就可以了。我使用豆包doubao-1-5-pro-32k 最大输入文字长度128K。普通的论文都能全部输入。

  • 书籍

书籍的长度比较大,通常有几百页。也没有书籍摘要,为了写出图书介绍,可以采取两种方式,一种方式是将图书分段(chunk_size) 逐段提取重要的内容,然后合并起来,写摘要。另一种方法是提取前10页的内容,做图书的介绍,因为通常图书的前几页包括了前言,目录等,前言中作者会重点介绍图书的主要内容,适合的读者和如何阅读这本书。 我尝试了一下,好像第二种方法效果更好一点。

  • 普通的文章

    普通的文章,如果不超过大模型输入的限制,就直接丢给它,请他去归纳总结。对于超长的文章,可以分段提取段落大意,然后在总结出文章的摘要。

代码

图书写简介

from chromadb import PersistentClient
from PyPDF2 import PdfReader
from openai import OpenAI
import os

os.environ['OPENAI_API_KEY'] ="your API Key"
os.environ['OPENAI_BASE_URL'] ="https://ark.cn-beijing.volces.com/api/v3"
LLM_client = OpenAI(
   # 此为默认路径,您可根据业务所在地域进行配置
   base_url="https://ark.cn-beijing.volces.com/api/v3",
   # 从环境变量中获取您的 API Key
   api_key=os.environ.get("0102f8a9-8727-4770-b67e-d289d4592343"),
)
def Summary(Text,Prompt):
    response = LLM_client.chat.completions.create(
         # 指定您创建的方舟推理接入点 ID,此处已帮您修改为您的推理接入点 ID
         model="doubao-1-5-pro-32k-250115",
         messages=[
             {"role": "system", "content": Prompt},
             {"role": "user", "content": Text}
         ]
         )
    response_message = response.choices[0].message.content
    return response_message
def extract_text_from_pdf(pdf_path):
    with open(pdf_path, 'rb') as file:
        reader = PdfReader(file)
        text=""
        number=len(reader.pages)
        if number>10:
             number=10
        for index in range(number):
            text += reader.pages[index].extract_text()
    return text
def split_text(text, chunk_size=500):
    return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
Chroma_client = PersistentClient()
text = extract_text_from_pdf("./pythonBook1.pdf")
split_doc=split_text(text,120000)
print("Slipt_doc:",len(split_doc))
split_summary=[]
index=0
for doc in split_doc:
    print(index)
    index=index+1
    #print(doc)
    split_summary.append(Summary(doc,"为一本书写一个推荐文章,下面书中的前10页,请摘录本书的主要内容,写作的目的,方法,适合的读者,保持简短扼要"))
summary_text=""    
for text in  split_summary:   
    summary_text += text
print(len(summary_text))
SummaryText=Summary(summary_text,"这是一本书中前10页的分段摘录,请依此为依据,这本书生成一个推荐文章,以中文输出")
print(SummaryText)

论文提取摘要

from chromadb import PersistentClient
from PyPDF2 import PdfReader
from openai import OpenAI
import os
import json
os.environ['OPENAI_API_KEY'] ="your API Key"
os.environ['OPENAI_BASE_URL'] ="https://ark.cn-beijing.volces.com/api/v3"
LLM_client = OpenAI(
   # 此为默认路径,您可根据业务所在地域进行配置
   base_url="https://ark.cn-beijing.volces.com/api/v3",
   # 从环境变量中获取您的 API Key
   api_key=os.environ.get("0102f8a9-8727-4770-b67e-d289d4592343"),
)
def Summary(Text):
    Prompt="""
    为一篇文章写一个摘要(Abstract),并且提取文章的标题,作者名称。如果没有提及作者,设置为空字符串
    如果文章中包含了摘要,就直接提取出来。
    否则,请生成文章的摘要。
    输出Json 格式。格式为:
    {
     "Name":Paper's Name,
     "Author":Writer's Name
     "Abstract" Paper's Abstract
     }
    摘要 Abstract 以中文输出。
    """
    response = LLM_client.chat.completions.create(
         # 指定您创建的方舟推理接入点 ID,此处已帮您修改为您的推理接入点 ID
         model="doubao-1-5-pro-32k-250115",
         messages=[
             {"role": "system", "content": Prompt},
             {"role": "user", "content": Text}
         ]
         )
    response_message = response.choices[0].message.content
    return response_message
def extract_text_from_pdf(pdf_path):
    with open(pdf_path, 'rb') as file:
        reader = PdfReader(file)
        text=""
        for page in reader.pages:
            text += page.extract_text()
    return text
def split_text(text, chunk_size=500):
    return [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
Chroma_client = PersistentClient()
InputFilePath="./DETC.2007-35530.pdf"
text = extract_text_from_pdf(InputFilePath)
SummaryText=Summary(text)
#print(SummaryText)
SummaryJson=json.loads(SummaryText)
print(SummaryJson["Name"])
print(SummaryJson["Author"])
print(SummaryJson["Abstract"])
FilePath="./"+SummaryJson["Name"]+"_Abstract.txt"
OutputFilePath="./"+SummaryJson["Name"]+".pdf"
with open(FilePath, "w", encoding="utf-8") as f:
  f.write(SummaryJson["Abstract"])
os.rename(InputFilePath, OutputFilePath)  

结论

        与传统的程序设计不同,编写AI 程序先要将事情搞明白,然后讲明白。有点类似于给秘书交代工作。需要有解决问题的思路。为文档写一个简介,看上去很简单的问题。实际上也有许多因素需要考虑。使用大模型整理下载的内容是十分有用的工具。

<think>好的,我现在需要回答用户的问题:如何使用AI技术从文档或网页中自动提取标题。根据用户提供的引用内容,特别是引用[3]和引用[4],我需要结合这些信息来构建一个清晰的步骤指南。 首先,引用[3]提到了使用PyMuPDF和PyPDF2库提取PDF文本,以及正则表达式处理标题。这可能涉及到传统的方法,但用户询问的是AI技术,所以可能需要结合机器学习或自然语言处理模型。然后,引用[4]提到使用不同的API模型,比如"prebuilt-document"或"prebuilt-read",这可能是指现有的AI服务,如Azure的文档智能或其他OCR服务。 接下来,我需要分步骤说明。第一步可能是预处理文档,比如使用OCR技术提取文本,尤其是扫描件。然后,利用自然语言处理技术,如BERT等模型,识别标题的结构特征,比如字体大小、位置等。此外,可能需要版面分析技术,如引用[1]中的TextIn文档解析技术,来识别标题所在的区域。 还需要考虑不同格式的文档,比如PDF、网页HTML等,处理方式可能不同。对于网页,可以使用XPath或CSS选择器来定位标题标签(h1, h2等),但用户可能更关注动态内容或复杂情况下的AI应用,比如没有明确标签时的处理。 可能需要提到具体的工具或库,比如Python的BeautifulSoup用于网页,或者使用预训练模型进行文本分类,将标题与其他文本区分开来。此外,引用[2]中的OpenKIE技术可能涉及信息抽取,可以应用于标题提取。 要注意用户提到的引用[4]中的解决方案,尝试不同API模型,可能需要推荐一些现有的AI服务,如Google Cloud Vision,AWS Textract,或者合合信息的TextIn技术,这些服务可能内置了标题提取的功能。 最后,需要总结关键点,强调结合结构分析和AI模型,以及使用现有API提高准确性。同时,提供示例代码,比如使用PyMuPDF提取文本,然后用正则表达式匹配标题,或者调用API的示例。</think>### 如何用AI技术从文档或网页中自动提取标题? #### **步骤1:文档预处理与文本提取** - **技术方法**: 1. **PDF/图像文档**:使用OCR技术提取文本。例如: - Python库:`PyMuPDF`、`PyPDF2`(适用于非扫描PDF)[^3] - AI服务:合合信息TextIn文档解析技术(支持多元素识别和版面分析)[^1] - 云API:Azure Document Intelligence、Google Vision API(支持扫描件OCR) 2. **网页文档**:通过HTML解析提取结构化内容。例如: - 使用`BeautifulSoup`或`Scrapy`解析`<h1>`、`<h2>`等标签。 #### **步骤2:标题特征识别与AI模型应用** - **特征分析**: - **结构特征**:标题通常位于文档顶部、字体较大、加粗或居中[^3]。 - **语义特征**:标题多为短语或短句,包含关键词(如“报告”“指南”“摘要”)。 - **AI技术**: 1. **预训练语言模型**: - 使用BERT、RoBERTa等模型对段落进行文本分类,识别标题段落。 - 示例代码(Python): ```python from transformers import pipeline classifier = pipeline("text-classification", model="bert-base-uncased") result = classifier("Document Title\nThis is the content...") if result[0]['label'] == 'HEADER': print("标题已识别") ``` 2. **版面分析模型**: - 合合信息TextIn技术通过多元素识别定位标题区域。 - 使用深度学习模型(如YOLO)检测文档中的标题位置。 #### **步骤3:后处理与优化** - **规则引擎**: - 正则表达式过滤(如匹配首行、特定关键词):`^# (.+)$` - 排除低置信度结果(如过长的文本段)。 - **API优化**: - 根据文档类型选择API模型,如`prebuilt-document`(通用文档)或`prebuilt-layout`(复杂版面)[^4]。 #### **示例流程(PDF标题提取)** ```python import fitz # PyMuPDF def extract_title(pdf_path): doc = fitz.open(pdf_path) first_page = doc[0] blocks = first_page.get_text("dict")["blocks"] for block in blocks: if "lines" in block: for line in block["lines"]: if line["spans"][0]["size"] > 14: # 假设标题字体较大 return line["spans"][0]["text"] return None ``` #### **技术挑战与解决方案** | 问题 | 解决方案 | |-----------------------|--------------------------------------------------------------------------| | 标题格式多样 | 结合结构分析与语义模型(如TextIn多元素识别) | | 低质量扫描件 | 使用高精度OCR API(如Azure Document Intelligence) | | 网页动态加载内容 | 集成Selenium模拟浏览器渲染后解析 | #### **典型应用场景** - **学术文献管理**:批量提取PDF论文标题并生成目录 - **企业文档自动化**:通过OpenKIE技术快速构建知识图谱[^2]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值