使用 Python 和 NLTK 进行文本摘要

一、说明

        文本摘要是一种自然语言处理技术,允许用户将大量文本总结为小块,而不会丢失任何重要信息。本文介绍NLP中使用Gensim和Sumy实现文本摘要的步骤。

二、为什么要总结文本?

        互联网包含大量信息,而且每秒都在增加。文本摘要可以通过提供长文本的简单、非正式的摘要来提供帮助。除了摘要之外,它还可以让用户快速准确地识别段落或文章的基本内容。

        总结文本有很多正当理由,包括:

  1. 减少阅读时间
  2. 提高生产力
  3. 不错过重要事实
  4. 使文本轮廓更容易

        文本摘要有两种主要方法:提取式和抽象式。

2.1  抽取文本摘要

        此方法通过从原始文本中选择最常用的短语和句子来创建摘要。最重要的单词和句子以及与该主题相关的信息最多的单词和句子被优先考虑。

 使用提取摘要器的示例:

        长文本:Python 是一种高级、解释性、交互式、面向对象的脚本语言。对于初级程序员来说,Python 是一门很棒的语言。

        摘 要:Python 是一种高级的、解释性的、交互式的、面向对象的脚本语言。

2.2 抽象文本摘要

        抽象摘要方法涉及生成传达源文档含义的全新短语和句子。它利用算法和数学以更短的形式创建原始文本的表示。

让我们用一个简单的例子来理解抽象总结器:

        长文本:Python 是一种高级、解释性、交互式、面向对象的脚本语言。对于初级程序员来说,Python 是一门很棒的语言。

        摘要:Python 是一种高级脚本语言,对于初级程序员很有帮助。

        这两种技术都有各自的用途。对于第一个,人们可以通过从源中挑选最热门的单词来创建简短的摘要。另一方面,第二种方法可以通过添加自己的文字来完全改变摘要,从而使原始消息不会消失。让我们看看如何用 Python 构建这些!

三、构建一个提取文本摘要器

        NLTK(自然语言处理工具包)是一个 Python 库,提供了一组可用于构建文本摘要的工具。

        我们将使用Python 编程维基百科页面内容作为示例。让我们编写一个简单的函数来使用requestsBeautifulSoup从互联网页中抓取数据:

from bs4 import BeautifulSoup
import requests

def scrape_con(url):
  res = requests.get(url)
  soup = BeautifulSoup(res.text,'html.parser') 
  content = soup.findAll("p")
  data = ""
  for text in content:
    data +=text.text
  return data

scrape_con('https://en.wikipedia.org/wiki/Python_(programming_language)')

文本摘要的第一步是清理文本。我们将执行一些基本的文本清理,例如将文本转换为小写、删除标点符号等。您可以从我之前关于心跳的文章中阅读有关文本清理的更多信息。

import re
def clean_data(data):
  text = re.sub(r"\[[0-9]*\]"," ",data)
  text = text.lower()
  text = re.sub(r'\s+'," ",text)
  text = re.sub(r","," ",text)
  return text
cleaned_data = clean_data(raw_data)

清理数据后,下一步将是创建单词和句子标记并计算每个标记的频率。

import nltk
nltk.download('punkt')
nltk.download('stopwords')
from nltk.tokenize import sent_tokenize,word_tokenize

sent_tokens = sent_tokenize(cleaned_data)
word_tokens = word_tokenize(cleaned_data)
word_frequency = {}
stopwords =  set(stopwords.words("english"))

for word in word_tokens:
    if word not in stopwords:
        if word not in word_frequency.keys():
            word_frequency[word]=1
        else:
            word_frequency[word] +=1
for word in word_frequency.keys():
    word_frequency[word] = (word_frequency[word]/maximum_frequency)

现在,我们将借助词典生成句子分数word_frequency

sentences_score = {}
for sentence in sent_tokens:
    for word in word_tokenize(sentence):
        if word in word_frequency.keys():
            if (len(sentence.split(" "))) <30:
                if sentence not in sentences_score.keys():
                    sentences_score[sentence] = word_frequency[word]
                else:
                    sentences_score[sentence] += word_frequency[word]

        最后,我们使用该heapq库提取前n个句子并将它们包含在最终摘要中。n是用户定义的数字,在下面的示例中我们将其设置为 3。

def get_key(val): 
    for key, value in sentences_score.items(): 
        if val == value: 
            return key 
key = get_key(max(sentences_score.values()))
summary = heapq.nlargest(n,sentences_score,key=sentences_score.get)  ## n=3
print(" ".join(summary))
         通过传递 n = 3,生成的提取摘要为:

python 的名字源自英国喜剧团体 monty python,Python 的创建者 Guido van rossum 在开发该语言时很喜欢这个团体。python 3.10 弃用了 wstr (将在 python 3.12 中删除;意味着届时需要修改 python 扩展)并向该语言添加模式匹配。

        还有其他库以更自动化的方式提供相同的解决方案。我们将在下面探讨它们。

隔离困难的数据样本?彗星可以做到这一点。通过我们的 PetCam 场景了解更多信息并发现彗星文物。

3.1.Gensim

        Gensim 是一个开源库,用于无监督主题建模、文档索引、相似性检索和其他自然语言处理功能,使用现代统计机器学习,如维基百科所述。

        Gensim 有一个summarize带有内置提取文本摘要器的类。让我们使用维基百科中的相同网页并使用gensim摘要器对其进行总结。

import gensim
import re
from gensim.summarization.summarizer import summarize
import requests
from bs4 import BeautifulSoup

url = 'https://en.wikipedia.org/wiki/Python_(programming_language)'

res = requests.get(url)
soup = BeautifulSoup(res.text,'html.parser')

extracted_rows_content = []
for i in range(len(soup.select('p'))):
    row_text = soup.select('p')[i].getText().strip()
    extracted_rows_content.append(row_text)
raw_data = " ".join(extracted_rows_content)

import re
def clean_data(data):
  text = re.sub(r"\[[0-9]*\]"," ",data)
  text = text.lower()
  text = re.sub(r'\s+'," ",text)
  text = re.sub(r","," ",text)
  return text
cleaned_article_content = clean_data(raw_data)

summary = summarize(cleaned_article_content, ratio = 0.01)
summary = re.sub('\[[^\]]*\]','',summary) 
print(summary)

        标准库的部分内容由规范涵盖 - 例如 Web 服务器网关接口 (wsgi) 实现 wsgiref 遵循 pep 333 - 但大多数是由其代码内部文档和测试套件指定的。

3.2. Sumy

        Sumy 是一个用于从 HTML 页面或纯文本中提取摘要的 Python 库。它使用多种算法来准备摘要。例如,我们正在使用 LexRank 算法,其主要思想是,如果一个句子与许多其他句子非常相似,那么它很可能是包含在摘要中的重要句子。

import sumy
from sumy.parsers.plaintext import PlaintextParser
from sumy.nlp.tokenizers import Tokenizer
from sumy.summarizers.lex_rank import LexRankSummarizer

import requests
from bs4 import BeautifulSoup

url = 'https://en.wikipedia.org/wiki/Python_(programming_language)'

res = requests.get(url)
soup = BeautifulSoup(res.text,'html.parser')

articles = []
for i in range(len(soup.select('p'))):
    article = soup.select('p')[i].getText().strip()
    articles.append(article)
raw_data = " ".join(articles)

import re
def clean_data(data):
  text = re.sub(r"\[[0-9]*\]"," ",data)
  text = text.lower()
  text = re.sub(r'\s+'," ",text)
  text = re.sub(r","," ",text)
  return text
cleaned_article_content = clean_data(raw_data)

# For Strings
parser = PlaintextParser.from_string(cleaned_article_content,Tokenizer("english"))

summarizer = LexRankSummarizer()
#Summarize the document with 2 sentences
summary = summarizer(parser.document, 2)

for sentence in summary:
    print(sentence)

        除了 LexRank 之外,Sumy 还有其他汇总方法,如Luhn、TextRank、SumBasic和LSA。潜在语义分析(LSA)是近年来最常用的方法。该方法能够识别文本中的同义词以及文档中未明确写入的主题。LsaSummarizer您可以通过从类导入来使用它sumy.summarizers.lsa

四、结论

        文本摘要可以通过简短的摘要表示主要事实来减少文章的阅读时间。提取和抽象方法都可以使用不同的方法来做到这一点。这完全取决于您的用例以及您需要哪种方法。当然,在某些情况下,提取摘要器无法在摘要中包含最上面的句子,而抽象摘要器会生成完全不同的摘要。最后,它们都只是需要一定程度的人类评估的算法。

五、推荐读物

1. Abstractive Text Summarization Using Python 
[Kaggle Notebook]
2. An approach to abstractive text summarization 
[IEEE Research Papaer]
3. Abstractive Text Summarization Using Sequence-to-Sequence RNNs and Beyond 
[cornell university (arxiv)]
4. Using Latent Semantic Analysis in Text Summarization and Summary Evaluation 
[By Josef Steinberger and Karel Ježek]5. 使用 Python 和 NLTK 进行文本摘要 |由 Abhay Parashar |心跳 (comet.ml)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/187191.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BART - 磁共振重建库 linux系统安装 MATLAB 使用

本文主要介绍如何在linux系统中安装伯克利大学的磁共振重建库BART 和在matlab中的配置使用。 安装必要的库 (linux 命令行) $ sudo apt-get install make gcc libfftw3-dev liblapacke-dev libpng-dev libopenblas-dev 下载编译BART 文件 (官网链接:BART Toolbox) 命令行下…

RPC和HTTP的区别

目录 1、RPC是什么 1.1 概念 1.2 RPC的组成部分 1.3 常见的 RPC 技术和框架 1.4 RPC的工作流程 2、HTTP是什么 2.1 概念 2.2 HTTP的消息格式 2.3 HTTP响应状态码有哪些 3、⭐RPC和HTTP的区别 小结 1、RPC是什么 1.1 概念 RPC&#xff08;Remote Procedure Call&am…

『Postman入门万字长文』| 从工具简介、环境部署、脚本应用、Collections使用到接口自动化测试详细过程

『Postman入门万字长文』| 从工具简介、环境部署、脚本应用、Collections使用到接口自动化测试详细过程 1 Postman工具简介2 Postman安装3 Postman界面说明4 一个简单请求4.1 请求示例4.2 请求过程 5 Postman其他操作5.1 import5.2 History5.3 Environment5.4 Global5.5 其他变…

RK3399 板子烧录Armbian

本来不想写在CSDN这里的。帮有需要的同学了吧。 板子上面标记型号为&#xff1a; GC18-108-RK3399-V2.0TEAN E120339 94V-OML1没有HDMI接口&#xff08;我也是汗&#xff0c;买的时候注意到&#xff0c;坑了&#xff09;&#xff0c;配置信息。 CPU : RK3399RAMROM: 4G16G无…

NX二次开发UF_CURVE_ask_combine_curves 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_combine_curves Defined in: uf_curve.h int UF_CURVE_ask_combine_curves(tag_t combine_curve_feature, tag_t * first_curve_tag, UF_CURVE_combine_curves_directi…

前车之鉴: 适用于所有select选择框的 全选反选逻辑,如何只用单个change事件优雅完成

文章目录 实际效果1.1 效果展示1.2 核心功能 Show CodeQ & A彩蛋 实际效果 1.1 效果展示 1.2 核心功能 区别网上其他思路&#xff0c;我这里不需要使用原生点击事件&#xff0c;将全选反选逻辑收敛在一个change事件上 此前已经看过一些全选逻辑同学尝试过后&#xff0c;会…

武汉数字孪生赋能工业制造,加速推进制造业数字化转型

随着数字孪生技术的不断推进&#xff0c;互联网、物联网、智能传感技术开始应用到数控机床的远程服务&#xff0c;状态监控&#xff0c;故障诊断&#xff0c;维护管理等方面。武汉数字孪生是在虚拟空间中创建物理对象的高保真虚拟模型&#xff0c;以模拟其在现实世界中的行为提…

【网络】传输层 --- 详解TCP协议

目录 一、协议段格式及其策略确认应答(ACK)机制6个标志位超时重传流量控制滑动窗口1、先谈滑动窗口一般情况2、再谈特殊窗口 拥塞控制拥塞窗口 延迟应答&&捎带应答面向字节流粘包问题 二、三次握手和四次挥手三次握手为什么是3次&#xff1f;不是2、4、5、6次呢 四次挥…

2023.11.25-电商项目建设业务学习1-指标,业务流程,核销

目录 1.指标分类(原子指标,派生指标,衍生指标) 2.一些业务名词 3.四大业务流程-销售需求 3.1-线上线下销售 3.2线上线下退款 4.四大业务流程-会员业务 5.四大业务流程-供应链业务 6.四大业务流程-商城业务 7.核销主题需求分析 1.指标分类(原子指标,派生指标,衍生指标) 原…

C++类与对象(上)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX&#x1f43c;个人WeChat&#xff1a;ILXOXVJE&#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&am…

Spark---SparkCore(一)

一、术语与宽窄依赖 1、术语解释 1、Master(standalone):资源管理的主节点&#xff08;进程&#xff09; 2、Cluster Manager:在集群上获取资源的外部服务(例如&#xff1a;standalone,Mesos,Yarn) 3、Worker Node(standalone):资源管理的从节点(进程)或者说管理本机资源的…

[Docker]十.Docker Swarm讲解

一.Dokcer Swarm集群介绍 1.Dokcer Swarm 简介 Docker Swarm 是 Docker 公司推出的用来管理 docker 集群的工具&#xff0c; 使用 Docker Swarm 可以快速方便的实现 高可用集群 ,Docker Compose 只能编排单节点上的容器, Docker Swarm 可以让我们在单一主机上操作来完成对 整…

C语言—sizeof和strlen的区别

sizeof和strlen的区别 1、两者无联系 2、 sizeof&#xff1a;计算数组&#xff0c;变量&#xff0c;类型所在空间的大小&#xff0c;单位是字节 strlen&#xff1a;求字符串的长度&#xff0c;\0之前的字符个数&#xff0c;只针对字符串求长度 3、sizeof是操作符 strlen是库…

全国甲骨文识读大会用到哪些竞赛软件

2023年&#xff0c;全国甲骨文识读大会第1季在“中华字都安阳”举办&#xff0c;天纵竞赛软件为此次高端知识竞赛提供软件支持。 甲骨文识读大会分为海选、初赛、复赛、决赛4个阶段&#xff0c;不分年龄、性别、职业、地域&#xff0c;并邀请国内甲骨文和殷商文化方面专家学者组…

打破障碍:2024年赋能企业人工智慧生成创新-5个应用场景与6个转型步骤

想要了解如何采用生成式AI来提高企业效率和竞争力&#xff1f;本指南将介绍如何采用生成式AI来实现数字化转型&#xff0c;并打造智能化商业模式。从5大应用场景和6大步骤切入&#xff0c;让您了解如何开启生成式AI创新。立即连线创新专家咨询或观看创新战略方案视频进一步了解…

构建未来:云计算 生成式 AI 诞生科技新局面

目录 引言生成式 AI&#xff1a;开发者新伙伴云计算与生成式 AI 的无缝融合亚马逊云与生成式 AI 结合的展望/总结我用亚马逊云科技生成式 AI 产品打造了什么&#xff0c;解决了什么问题未来科技发展趋势&#xff1a;开发者的机遇与挑战结合实践看未来结语开源项目 引言 2023年…

推荐6款本周 yyds 的开源项目

&#x1f525;&#x1f525;&#x1f525;本周GitHub项目圈选: 主要包含 链接管理、视频总结、有道音色情感合成、中文文本格式校正、GPT爬虫、深度学习推理 等热点项目。 1、Dub 一个开源的链接管理工具&#xff0c;可自定义域名将繁杂的长链接生成短链接&#xff0c;便于保…

ORA-14452: 试图创建, 变更或删除正在使用的临时表中的索引

在编写一个test存储过程中出现一个错误报告:ORA-14452: 试图创建, 变更或删除正在使用的临时表中的索引,代码如下 create or replace PROCEDURE TMP_TRANSCRIPT AS str_sql varchar2(500);v_flag number:0; --标识 begin--判断临时表是否存在SELECT COUNT(*) into v_flag FROM…

vue3(一)-基础入门

一、导入vue.js 1.可以借助 script 标签直接通过 CDN 来使用 Vue <!-- <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> -->2.也可以下载vue.global.js文件并在本地导入 <script src"./lib/vue.global.js">&…

管理类联考——数学——汇总篇——知识点突破——代数——函数——记忆

文章目录 整体文字提炼图像绘画 考点记忆/考点汇总——按大纲 本篇思路&#xff1a;根据各方的资料&#xff0c;比如名师的资料&#xff0c;按大纲或者其他方式&#xff0c;收集/汇总考点&#xff0c;即需记忆点&#xff0c;在通过整体的记忆法&#xff0c;比如整体信息很多&am…