使用 BeautifulSoup 的文本摘要器完整指南

189 阅读7分钟

在今天的快节奏生活中,时间是一个宝贵的实体。因此,阅读新闻帖子或文章中的长行文字可能成为一项令人昏昏欲睡的任务。但是,阅读一个有帮助的上下文的简短段落,传递相同的意思,有助于节省大量的时间。在这种情况下,文本总结器可以成为一个非常有用的工具。文本总结是指从一个较长的文本文件中创建一个简短、准确和流畅的摘要。它也可以被定义为缩短长文本的技术。其目的是创建一个只包含文件中概述的要点的摘要。今天,我们周围的世界依赖于收集和处理大量的数据。由于每天都有如此大量的数据在数字空间中流通,因此长期以来一直需要开发机器学习算法,以自动缩短较长的文本,并帮助创建和提供准确的摘要,不失为流畅地传递预期信息

我们总是享受快速获取海量信息的乐趣。但存在的大多数信息都是多余的,无关紧要的,而且可能无法传达预期的意思。即使你想从一篇在线新闻文章中寻找特定的信息,你也可能不得不挖掘其全部内容,并花费大量时间来分离不必要的东西,然后才能找到你需要的信息。因此,应用文本总结可以减少阅读时间,加快搜索信息的速度,反过来也可以增加小范围内可以容纳的信息量。由于人工文本总结非常耗时,而且似乎是一项费力的任务,因此这种任务的自动化正日渐受到欢迎。因此,它也构成了该领域学术研究的强大动力。自动文本总结的目的是将冗长的文件转化为简短的版本,而不需要手动执行。

机器学习算法 可以被训练来理解文件,并在产生所需的总结性文本之前识别出传达重要事实和信息的特定部分。文本总结技术也有两种主要类型,即抽象式和提取式总结。在基于提取的总结中,代表文本文件中最重要内容的词的子集被抽出并组合起来进行总结。它就像一个高亮器,从源文本中选择主要的信息。在机器学习中,提取式总结通常涉及权衡出句子的所有重要部分,并使用结果来生成总结。不同的算法和方法可以用来识别句子的权重,然后根据它们的相关性和相互之间的相似性将它们排下来,之后再将它们连接起来生成摘要。 一种先进的深度学习技术被应用于解析和缩短原始文件,以实现基于抽象的总结技术。由于抽象化的机器学习算法可以生成代表源文本中最重要信息的新短语和句子,它们也可以协助克服提取技术在语法上的不准确之处。虽然抽象化技术在文本总结方面表现更好,但开发其算法需要使用复杂的深度学习技术和语言建模技术。同样重要的是要记住,从任何一个方面产生的最终摘要必须是完美的长度。它既不应该太长,也不应该太短。结构需要对读者友好,而且句子必须连贯并有意义。

图片来源

什么是Beautiful Soup?

Beautiful Soup是一个开源的Python库,用于从HTML、XML和其他标记语言中获取数据。如果你有一些显示与你的研究有关的数据的网页,如日期、地址信息或重要的文本行,但没有任何办法直接下载数据,使用Beautiful Soup可以帮助你从网页中提取特定的内容,去除存在的HTML标记,并将信息保存为数据。它是一个神奇的网络搜刮工具,可以帮助你清理和解析你从网上拉下来的文件。Beautiful Soup为导航、搜索和修改提供了简单的方法和Pythonic习语。Beautiful Soup还自动将传入的文件转换为Unicode,将传出的文件转换为UTF-8。它在流行的Python解析器(如lxml和html5lib)中排名第一,这使得我们可以尝试不同的解析策略,但用速度换取灵活性。

开始使用代码

在这篇文章中,我们将使用Hugging Face Transformer和Beautiful Soup创建一个文本总结器,用于从网页上抓取文本。我们的目标是生成一个总结性的段落,从整个网页文本中获得重要的背景。一个文本总结器的视频教程激发了以下代码;你可以通过这里的链接找到该视频。

安装库

创建一个文本总结器模型的第一步是安装所需的库。在这里,我们将安装一个来自Hugging Face的Transformer,它包含PyYAML,一种为人类可读性和与脚本语言互动而设计的数据序列化格式。你可以通过下面这行代码来完成。

#installing the library
!pip install transformers
设置管道

接下来,我们将设置总结管道,从Transformer中调用Beautiful Soup方法。

#setting up the summarizer pipeline
from transformers import pipeline
from bs4 import BeautifulSoup
import requests

输出。

现在让我们为Beautiful Soup提供网页的URL路径,以便从其中搜出文本。

#webpage path for scraping text 
URL = "https://analyticsindiamag.com/complete-guide-to-augly-a-modern-data-augmentation-library/"

这里我使用的是一个单一的URL路径,但你也可以将文本与两个URL结合在一起!

使用请求方法抓取整个网页。

r = requests.get(URL)

但是我们不希望从整个网页中获取不必要的信息;因此我们现在将使用一段代码,只提取网页中的标题和文本。

#using html parser to sort out text only 
soup = BeautifulSoup(r.text, 'html.parser')
 
#scraping only title and paragraph
results = soup.find_all(['h1', 'p'])
 
#saving the results generated
text = [result.text for result in results]
ARTICLE = ' '.join(text)

#visualizing scraping result 
ARTICLE

我们可以看到,我们现在只提取了总结所需的必要信息。

现在我们将对文本进行预处理,将其送入我们的管道。在此之前,我们需要删除可能存在的不必要的特殊字符和句号,并用文本中的字符和句子结尾来代替它们。这将使我们的总结器模型更容易从结果中总结并找出句子的结尾。

#setting chunk length to 500 words
max_chunk = 500
 
#removing special characters and replacing with end of sentence
ARTICLE = ARTICLE.replace('.', '.<eos>')
ARTICLE = ARTICLE.replace('?', '?<eos>')
ARTICLE = ARTICLE.replace('!', '!<eos>')


让我们继续进行进一步的文本处理;在这里,我们将把我们的文本分割成单个的单词,然后使用附加功能进行协作。我们将对整个文本进行循环处理,将其长度限制在500字以内,并得出摘要。

#splitting out each sentence from the text into words 
sentences = ARTICLE.split('<eos>')
current_chunk = 0 
chunks = []
 
#looping through split text to process
for sentence in sentences:
    if len(chunks) == current_chunk + 1: 
        if len(chunks[current_chunk]) + len(sentence.split(' ')) <= max_chunk:
            chunks[current_chunk].extend(sentence.split(' '))
        else:
            current_chunk += 1
            chunks.append(sentence.split(' '))
    else:
        print(current_chunk)
        chunks.append(sentence.split(' '))
 
for chunk_id in range(len(chunks)):
    chunks[chunk_id] = ' '.join(chunks[chunk_id])

总结文本块

最后,我们将设置我们的总结器以得出我们的输出。我们将总结的长度设定为120字,最小总结长度为30字。

#setting our summarizer
res = summarizer(chunks, max_length=120, min_length=30, do_sample=False)

这样做为我们提供了多个简短的摘要;让我们把所有的摘要合并成一个。

#obtaining the resultant summary
' '.join([summ['summary_text'] for summ in res])

输出 :

正如我们所看到的,结果是整个网页文本的摘要文本

将得出的摘要保存为文本文件。

#saving the summary into a text file
text = ' '.join([summ['summary_text'] for summ in res])
with open('victorsummary.txt', 'w') as f:
   f.write(text)

结束语

在这篇文章中,我们了解了什么是文本总结器,以及它如何在我们的日常生活中起到作用。我们还创建了一个文本总结器模型,它从网页中刮取文本,并使用Hugging Face Transformer和Beautiful Soup Library提供简短而有意义的总结。下面的实施可以在Colab笔记本中找到,使用这里的链接。

学习愉快!

参考资料

The postComplete Guide To Text Summarizer Using Beautiful Soupappeared first onAnalytics India Magazine.