使用Python总结文本文章

引言

文本摘要涉及减少文本中的单词数量,同时保持其意义。它提高了效率,减少了阅读多篇文章的时间。本文我们将演示如何使用 Python 实现文本摘要自动化。

阅读文章中的所有文字并提取摘要是一项耗时而乏味的工作。幸运的是,我们可以使用NLP模型自动生成文本摘要。而且越来越多的媒体平台使用NLP进行文本摘要生成。本文我们将演示如何使用Python对文章进行总结。

什么是文本摘要?

本质上,任务是将文本作为输入并输出其摘要。关键是确保输入文本的整体含义保留在摘要文本中。

有两种关于文本总结的技术。其中一种技术称为提取文本摘要技术。它涉及从文本中提取最重要的单词。另一种技术称为抽象摘要,涉及使用已知的学习词汇来解释输入文本。

在本文中,我将专注于提取摘要技术。

获取文本

几乎所有主要机构都在利用自然处理语言 (NLP) 模型来总结文本。例如,我们可以在社交媒体平台上找到对一家公司的数千甚至数百万条评论。使用文本摘要器可以实现对某个主题的公正看法。文本摘要的一种方法可以像删除不重要的单词一样直接,对每个单词进行评分并只保留包含最重要单词的句子。

详细来说,Twitter 是最大的微博社交媒体平台之一。我们可以尝试获取一段时间内关于某个主题的所有推文,并将它们与来自 Google 的新闻文章结合起来。这可能会为我们提供对某个主题的公正看法。

一旦组合文本准备就绪,我们就可以使用文本摘要器为我们总结文本。我们可以在去除文本中的噪声后对每个单词进行排名,然后根据构成句子的单词的排名对每个句子进行排名,最后取排名最高的句子。

如何总结文本摘要?

我们将专注于提取摘要技术。它涉及从文本中提取最重要的单词。这意味着我们需要计算每个单词的重要性分数。有时,数据可能包含大量噪声。 因此,我们的第一个目标是删除那些没有增加价值的词语。

关键是专注于关键信息并去除噪音。下面的代码执行以下关键步骤:

1. 软件包下载完成后,第一步就是通过执行间歇处理、去掉标点符号和停止文字来对文本进行预处理。

2. 计算机理解数字。我们需要将文本转换为数字。下一步是根据每个单词的频率对其进行评分或排名,然后对频率分数进行归一化。然后我们将创建一个map,其中map的键是单词,值是分数。

3. 然后,通过将构成句子的单个单词的分数相加,为每个句子赋予一个重要性分数。

4. 最后返回前 3 个句子来总结文本。

第一步: 安装软件包

pip install spacy

第二步: 下载 Spacy 模块

import sys
!{sys.executable} -m spacy download en

第三步: 导入包

import spacy
from spacy.lang.en.stop_words import STOP_WORDS
from string import punctuation
import string
from spacy.lang.en.stop_words import STOP_WORDS
from spacy.lang.en import English
from heapq import nlargest
punctuations = string.punctuation
from spacy.language import Language
nlp = English()
nlp.add_pipe('sentencizer') # updated
parser = English()

第四步: 预处理文字以消除噪音

def pre_process(document):
    clean_tokens = [ token.lemma_.lower().strip() for token in document ]
    clean_tokens = [ token for token in clean_tokens if token not in STOP_WORDS and token not in punctuations ]
    tokens = [token.text for token in document]
    lower_case_tokens = list(map(str.lower, tokens))
    
    return lower_case_tokens

第五步: 从文本生成数字矢量

def generate_numbers_vector(tokens):
    frequency = [tokens.count(token) for token in tokens]
    token_dict = dict(list(zip(tokens,frequency)))
    maximum_frequency=sorted(token_dict.values())[-1]
    normalised_dict = {token_key:token_dict[token_key]/maximum_frequency for token_key in token_dict.keys()}
    return normalised_dict

第六步: 生成句子重要性得分

def sentences_importance(text, normalised_dict):
    importance ={}
    for sentence in nlp(text).sents:
        for token in sentence:
            target_token = token.text.lower()
            if target_token in normalised_dict.keys():
                if sentence in importance.keys():
                    importance[sentence]+=normalised_dict[target_token]
                else:
                    importance[sentence]=normalised_dict[target_token]
    return importance

第七步: 生成摘要

def generate_summary(rank, text):
    target_document = parser(text)
    importance = sentences_importance(text, generate_numbers_vector(pre_process(target_document)))
    summary = nlargest(rank, importance, key=importance.get)
    return summary

第八步: 主函数

·  END  ·

HAPPY LIFE

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
处理 TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于文本挖掘和信息检索的常用算法,它可以帮助我们计算一个词语在一篇文档中的重要程度和在整个文集中的普遍重要程度。在这篇文章中,我们将使用Python批量处理文本数据,并使用TF-IDF算法计算每个文档中单词的重要程度。 首先,我们需要安装必要的Python库。在命令行中输入以下命令: ``` pip install nltk pandas numpy scikit-learn ``` 接下来,我们需要下载停用词(Stopwords)和词干提取器(Stemmer)。停用词是指在文本分析中无需考虑的常见词汇,例如“the”、“a”、“is”等等。词干提取器是一种算法,它将单词的不同形态(例如,“running”、“runs”、“ran”)转换为它们的基本形式(即“run”)。 在Python中,我们可以使用Natural Language Toolkit(NLTK)库来下载停用词和词干提取器。在Python交互式环境中输入以下命令: ``` import nltk nltk.download('stopwords') nltk.download('punkt') nltk.download('wordnet') ``` 现在,我们已准备好开始处理文本数据了。我们将使用Pandas库来读取文本文件并将它们存储在DataFrame中。在这个例子中,我们将使用一个包含多个文档的文件夹作为输入。 ``` import os import pandas as pd # 定义文件夹路径 folder_path = './documents/' # 读取文件夹中的所有文件 file_names = os.listdir(folder_path) # 创建一个空的DataFrame documents = pd.DataFrame(columns=['filename', 'text']) # 逐个读取文件并添加到DataFrame中 for file_name in file_names: file_path = os.path.join(folder_path, file_name) with open(file_path, 'r') as file: text = file.read() documents = documents.append({'filename': file_name, 'text': text}, ignore_index=True) ``` 现在,我们已经将文本数据存储在DataFrame中了。下一步是对文本进行预处理,包括去除标点符号、转换为小写、去除停用词和词干提取。 ``` import string from nltk.corpus import stopwords from nltk.tokenize import word_tokenize from nltk.stem import PorterStemmer, WordNetLemmatizer # 定义停用词、词干提取器和词形还原器 stop_words = set(stopwords.words('english')) stemmer = PorterStemmer() lemmatizer = WordNetLemmatizer() # 定义一个函数来处理文本 def preprocess_text(text): # 去除标点符号 text = text.translate(str.maketrans('', '', string.punctuation)) # 转换为小写 text = text.lower() # 分词 words = word_tokenize(text) # 去除停用词和单字符词 words = [word for word in words if word not in stop_words and len(word) > 1] # 词干提取和词形还原 words = [stemmer.stem(word) for word in words] words = [lemmatizer.lemmatize(word) for word in words] # 合并词语 text = ' '.join(words) return text # 对每个文档进行预处理 documents['processed_text'] = documents['text'].apply(preprocess_text) ``` 现在,我们已经对文本数据进行了预处理。下一步是使用TF-IDF算法计算每个文档中单词的重要程度。在Python中,我们可以使用scikit-learn库来实现TF-IDF算法。我们将使用TfidfVectorizer类来计算TF-IDF值,并将结果存储在DataFrame中。 ``` from sklearn.feature_extraction.text import TfidfVectorizer # 定义TF-IDF向量化器 vectorizer = TfidfVectorizer() # 计算TF-IDF值 tfidf = vectorizer.fit_transform(documents['processed_text']) # 将结果存储在DataFrame中 tfidf_df = pd.DataFrame(tfidf.toarray(), columns=vectorizer.get_feature_names()) tfidf_df['filename'] = documents['filename'] ``` 现在,我们已经计算出每个文档中单词的TF-IDF值,并将结果存储在DataFrame中了。我们可以使用这些数据来执行各种分析,例如查找每个文档中最重要的单词、计算不同文档之间的相似度等等。 总结 在本文中,我们介绍了如何使用Python批量处理文本数据,并使用TF-IDF算法计算每个文档中单词的重要程度。这些技术可以应用于各种文本挖掘和信息检索任务中,例如文本分类、关键词提取、相似性分析等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值