当前位置: 首页 > 科技观察

如何使用Python自然语言处理NLP创建摘要_0

时间:2023-03-14 16:47:26 科技观察

你是否曾经看过很多报告,只想对每份报告做一个快速的总结总结?你遇到过这样的情况吗?总结已经成为21世纪解决数据问题的一个非常有用的方法。在本文中,我将向您展示如何使用Python中的自然语言处理(NLP)创建个人文本摘要器。前言:个人文本摘要制作起来并不难,初学者也能轻松上手!什么是文本摘要基本上,这是一项在保持关键信息不丢失整体含义的情况下生成准确摘要的任务。有两种一般的摘要类型:摘要摘要>>从原始文本生成新句子。提取摘要>>识别重要的句子并使用这些句子创建摘要。我应该使用哪种总结方法?我使用提取式摘要是因为我可以将这种方法应用于许多文档,而无需执行训练机器学习模型的大量(令人生畏的)任务。此外,抽取式摘要比抽象摘要具有更好的摘要效果,因为抽象摘要必须从原始文本中生成新的句子,这是一种比数据驱动方法更难提取重要句子的方法。如何创建自己的文本摘要器我们将使用单词直方图对句子的重要性进行排序,然后创建摘要。这样做的好处是您无需训练模型即可在文档上使用它。文本摘要工作流程这是我们将遵循的工作流程...导入文本>>>>清理文本并拆分成句子>>删除停用词>>构建单词直方图>>排列句子>>选择前N个句子进行提取摘要(1)示例文本我使用了一篇新闻文章的文本,标题是Apple正在以5000万美元收购一家AI初创公司以推进其应用程序。您可以在此处找到原始新闻文章:https://analyticsindiamag.com/apple-acquires-ai-startup-for-50-million-to-advance-its-apps/您也可以从Github下载文本文档:https://github.com/louisteo9/personal-text-summarizer(2)importlibrary#NaturalLanguageToolkit(NLTK)importnltknltk.download('stopwords')#文本预处理正则表达式importre#首句队列算法importheapq#NumPyimportnumpyasnp#pandasforcreatingdataframesimportpandasasspd#matplotlibplottingfrommatplotlibimportpyplotasplt%matplotlibinline(3)导入文本并执行预处理有很多方法可以做到这一点。这里的目标是拥有一个干净的文本,我们可以将其输入到我们的模型中。#Loadtextfilewithopen('Apple_Acquires_AI_Startup.txt','r')asf:file_data=f.read()这里我们使用正则表达式进行文本预处理。我们将(A)将参考编号替换为空格(如果有...),即[1]、[10]、[20],(B)将一个或多个空格替换为一个空格。text=file_data#如果有,请用空格替换text=re.sub(r'\[[0-9]*\]','',text)#用单个空格替换一个或多个空格text=重新。sub(r'\s+','',text)然后我们形成一个干净的小写文本(没有特殊字符、数字和额外空格),并将其拆分为单独的单词,用于短语得分计算和构造词直方图。使文本干净的原因是该算法不会将“理解”和“理解”视为两个不同的词。#将所有大写字符转换为小写字符clean_text=text.lower()#将[a-zA-Z0-9]以外的字符替换为空格clean_text=re.sub(r'\W','',clean_text)#replace带空格的数字clean_text=re.sub(r'\d','',clean_text)#用一个空格替换一个或多个空格clean_text=re.sub(r'\s+','',clean_text)(4)将文本拆分成句子我们使用NLTKsent_tokenize方法将文本拆分成句子。我们将评估每个句子的重要性,然后决定每个句子是否应该包含在摘要中。sentences=nltk.sent_tokenize(text)(5)删除停用词停用词是不会给句子增加太多意义的英语单词。在不牺牲句子含义的情况下,可以安全地忽略它们。我们在这里下载了一个包含英文停用词的文件,我们将获取停用词列表并将它们存储在stop_word变量中。#获取停用词列表stop_words=nltk.corpus.stopwords.words('english')(6)构建直方图让我们根据每个词在整个文本中出现的次数来评估它的重要性。我们将通过(1)将单词拆分为干净的文本,(2)删除停用词,然后(3)检查文本中每个单词的频率来完成此操作。#创建空字典以容纳字数word_count={}#循环标记化的词,删除停用词并将字数保存到字典forwordinnltk.word_tokenize(clean_text):#removestopwordsifwordnotinstop_words:#Savewordcounttodictionaryifwordnotinword_count.keys():word_count[word]=1else:word_count[word]+=1让我们绘制单词直方图并查看结果。plt.figure(figsize=(16,10))plt.xticks(rotation=90)plt.bar(word_count.keys(),word_count.values())plt.show()我们把它转成条形图吧,只显示前20个字,下面有辅助功能。#helper函数绘制最上面的单词。defplot_top_words(word_count_dict,show_top_n=20):word_count_table=pd.DataFrame.from_dict(word_count_dict,orient='index').rename(columns={0:'score'})word_count_table.sort_values(by='score').尾(show_top_n).plot(kind='barh',figsize=(10,10))plt.show()让我们显示前20个单词。plot_top_words(word_count,20)从上面的图中,我们可以看到单词“ai”和“apple”出现在顶部。这是有道理的,因为这篇文章是关于Apple收购一家AI初创公司的。(7)根据分数对句子进行排序现在,我们将根据句子分数对每个句子的重要性进行排序。我们将:删除超过30个单词的句子,认识到长句子可能并不总是有意义;然后,将构成句子的每个单词的分数相加,形成句子分数。得分高的句子将排在第一位。前面的句子将构成我们的总结。注意:根据我的经验,任何25到30个单词都会给你一个很好的总结。#创建一个空字典来存储句子分数sentence_score={}#循环标记化的句子,只取少于30个单词的句子,然后将单词分数相加形成句子分数forsentenceinsentences:#检查句子中的单词是否在字典中的单词计数forwordinnltk.word_tokenize(sentence.lower()):ifwordinword_count.keys():#只接受少于30个单词的句子iflen(sentence.split(''))<30:#添加单词分数句子分数在ifsentencenotinsentence_score.keys():sentence_score[sentence]=word_count[word]else:sentence_score[sentence]+=word_count[word]我们将句子分数字典转换为数据框并显示sentence_score。注意:词典不允许根据分数对句子进行排序,因此需要将存储在词典中的数据转换为DataFrame。df_sentence_score=pd.DataFrame.from_dict(sentence_score,orient='index').rename(columns={0:'score'})df_sentence_score.sort_values(by='score',ascending=False)(8)选择上一句作为总结,我们使用堆队列算法来选择前3个句子并将它们存储在best_quences变量中。通常3-5句话就够了。根据文档的长度,可以随意更改要显示的最上面句子的数量。在这个例子中,我选择了3,因为我们的文本比较短。#Showthebestthreesentencesasasummarybest_sentences=heapq.nlargest(3,sentence_score,key=sentence_score.get)让我们使用print和for循环函数显示摘要文本。print('SUMMARY')print('------------------------')#按照原文句子顺序显示最上面的句子forsentenceinsentences:ifsentenceinbest_sentences:print(sentence)这是我的Jupyternotebooks的Github链接。您还将找到一个可立即用于总结文本的可执行Python文件:https://github.com/louisteo9/personal-text-summarizer让我们看看实际的算法!这是一篇标题为“Apple收购AI初创公司以推进其应用程序”的原创新闻文章为了扩大其AI产品组合,Apple以大约5000万美元的价格收购了位于西班牙的AI视频初创公司Vilynx。据彭博社报道,人工智能初创公司——Vilynx总部位于巴塞罗那,众所周知,该公司使用计算机视觉构建软件来分析视频的视觉、文本和音频内容,目的是“理解”视频中的内容。据该公司网站称,这有助于它对视频的元数据进行分类和标记,以及生成自动视频预览,并向用户推荐相关内容。Apple告诉媒体,该公司通常会不时收购较小的科技公司,而通过最近的收购,该公司可能会使用Vilynx的帮助改进各种应用程序的技术。据媒体报道,Siri、搜索、照片和其他依赖Apple的应用程序以及AppleTV、音乐、新闻等应用程序都可能成为候选者,仅举几例将通过Vilynx的技术进行革命性的变革。随着首席执行官蒂姆库克的愿景增强现实的潜力,该公司还可以利用Vilynx等基于AI的工具。此次收购还将提升Apple的AI专业知识,从Vilynx加入50名工程师和数据科学家,这家初创公司将成为其中之一消息称,苹果在欧洲的主要人工智能研究中心。苹果在过去几个月里在人工智能领域取得了重大进展,去年12月以200美元的价格收购了总部位于英国的SpectralEdge、总部位于西雅图的Xnor.ai百万和Voysis和Inductiv帮助它改进Siri。凭借其悄悄收购小公司的习惯,AppleingamarkintheAI??space.In2018,CEOTimCooksaidinaninterviewthatthecompanyhadbought20companiesoversixmonths,whileonlysixwerepublicknowledge.Thesummaryisasfollows:SUMMARY------------------------InanattempttoscaleupitsAIportfolio,ApplehasacquiredSpain-basedAIvideostartup—Vilynxforapproximately$50million.WithCEOTimCook'svisionofthepotentialofaugmentedreality,thecompanycouldalsomakeuseofAI-basedtoolslikeVilynx.Withitshabitofquietlypurchasingsmallercompanies,AppleismakingamarkintheAIspace.结尾祝贺你!你已经在Python中创建了你的个人TextSummarizerIhope,thesummarizationlooksprettygood.