NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary)

简介: NLP:基于nltk和jieba库对文本实现提取文本摘要(两种方法实现:top_n_summary和mean_scored_summary)

输出结果

image.png



1、测试文本


今天一大早,两位男子在故宫抽烟对镜头炫耀的视频在网络上传播,引发网友愤怒。有人感到后怕,600年的故宫真要这两个人给点了,万死莫赎。也有评论称,把无知当成炫耀的资本,丢人!

视频中两位男子坐在故宫公共休息区的遮阳伞下,面对镜头问出:“谁敢在故宫抽烟?”语气极其嚣张,表情带有挑衅意味。话音刚落,另外一位男子面向镜头吸了一口烟。而视频中两人也表示知道有故宫禁止吸烟的规定。

事实上,2013年5月18日是国际博物馆日,故宫从这一天开始至今一直实行全面禁烟。根据规定,故宫博物院全体员工在院合作单位和个人不管在室内和室外,也不分开放区与工作区,一律禁止吸烟,对违反禁止吸烟规定的人员将进行严格处罚并通报全院。

此外,在2015年6月1日起北京全市也开始了《控制吸烟条例》,规定公共场所工作场所室内环境室外排队等场合禁止吸烟,违者将最高被罚200元,全市统一设立举报电话12320。

视频在网络上传播开来,不少网友担心故宫的安危,称一旦发生火情,后果不堪设想,有网友表示,这样的行为应该被旅游景区拉近黑名单,建议终身禁止进入任何景区和各种场馆。


设计思路


后期更新……




核心代码

def sent_tokenizer(texts):

   start=0

   i=0#每个字符的位置

   sentences=[]

   punt_list='.!?。!?'.encode('utf-8') #',.!?:;~,。!?:;~'.decode('utf8')

   # punt_lists='.!?。!?'.decode()

   for text in texts:

       if text in punt_list and token not in punt_list: #检查标点符号下一个字符是否还是标点

           sentences.append(texts[start:i+1])#当前标点符号位置

           start=i+1#start标记到下一句的开头

           i+=1

       else:

           i+=1#若不是标点符号,则字符位置继续前移

           token=list(texts[start:i+2]).pop()#取下一个字符

   if start<len(texts):

       sentences.append(texts[start:])#这是为了处理文本末尾没有标点符号的情况

   return sentences

def load_stopwordslist(path):

   print('load stopwords...')

   stoplist=[line.strip() for line in codecs.open(path,'r',encoding='utf8').readlines()]

   stopwrods={}.fromkeys(stoplist)

   return stopwrods

def summarize(text):

   stopwords=load_stopwordslist('stopwords.txt')

   sentences=sent_tokenizer(text)

   words=[w for sentence in sentences for w in jieba.cut(sentence) if w not in stopwords if len(w)>1 and w!='\t']

   wordfre=nltk.FreqDist(words)

   topn_words=[w[0] for w in sorted(wordfre.items(),key=lambda d:d[1],reverse=True)][:N]

   scored_sentences=_score_sentences(sentences,topn_words)

   #approach 1,利用均值和标准差过滤非重要句子

   avg=numpy.mean([s[1] for s in scored_sentences])#均值

   std=numpy.std([s[1] for s in scored_sentences])#标准差

   mean_scored=[(sent_idx,score) for (sent_idx,score) in scored_sentences if score>(avg+0.5*std)]

   #approach 2,返回top n句子

   top_n_scored=sorted(scored_sentences,key=lambda s:s[1])[-TOP_SENTENCES:]

   top_n_scored=sorted(top_n_scored,key=lambda s:s[0])

   return dict(top_n_summary=[sentences[idx] for (idx,score) in top_n_scored],mean_scored_summary=[sentences[idx] for (idx,score) in mean_scored])

def _score_sentences(sentences,topn_words):

   scores=[]

   sentence_idx=-1

   for s in [list(jieba.cut(s)) for s in sentences]:

       sentence_idx+=1

       word_idx=[]

       for w in topn_words:

           try:

               word_idx.append(s.index(w))#关键词出现在该句子中的索引位置

           except ValueError:#w不在句子中

               pass

       word_idx.sort()

       if len(word_idx)==0:

           continue

       #对于两个连续的单词,利用单词位置索引,通过距离阀值计算族

       clusters=[]

       cluster=[word_idx[0]]

       i=1

       while i<len(word_idx):

           if word_idx[i]-word_idx[i-1]<CLUSTER_THRESHOLD:

               cluster.append(word_idx[i])

           else:

               clusters.append(cluster[:])

               cluster=[word_idx[i]]

           i+=1

       clusters.append(cluster)

       #对每个族打分,每个族类的最大分数是对句子的打分

       max_cluster_score=0

       for c in clusters:

           significant_words_in_cluster=len(c)

           total_words_in_cluster=c[-1]-c[0]+1

           score=1.0*significant_words_in_cluster*significant_words_in_cluster/total_words_in_cluster

           if score>max_cluster_score:

               max_cluster_score=score

       scores.append((sentence_idx,max_cluster_score))

   return scores;



相关文章
|
机器学习/深度学习 存储 自然语言处理
NLP参数高效迁移学习:Adapter方法——论文简读
本研究深入探讨了自然语言处理中参数高效的迁移学习方法——Adapter。通过在预训练模型中引入小型可训练模块,仅调整少量额外参数即可完成模型适配。理论分析表明,该方法在初始化时保持网络行为稳定,并通过瓶颈结构大幅压缩参数规模。实验结果显示,Adapter在GLUE基准上仅用3.6%的参数便达到接近全微调的性能,且对学习率具有更强的鲁棒性。相比传统微调和其他参数高效方法,Adapter在多任务场景下展现出更优的存储效率与泛化能力,为大规模模型的实际部署提供了高效可行的解决方案。
923 7
|
数据采集 机器学习/深度学习 自然语言处理
NLP助力非结构化文本抽取:实体关系提取实战
本文介绍了一套基于微博热帖的中文非结构化文本分析系统,通过爬虫代理采集数据,结合NLP技术实现实体识别、关系抽取及情感分析。核心技术包括爬虫模块、请求配置、页面采集和中文NLP处理,最终将数据结构化并保存为CSV文件或生成图谱。代码示例从基础正则规则到高级深度学习模型(如BERT-BiLSTM-CRF)逐步演进,适合初学者与进阶用户调试与扩展,展现了中文NLP在实际场景中的应用价值。
1092 3
NLP助力非结构化文本抽取:实体关系提取实战
|
机器学习/深度学习 自然语言处理 知识图谱
GraphRAG在自然语言处理中的应用:从问答系统到文本生成
【10月更文挑战第28天】作为一名自然语言处理(NLP)和图神经网络(GNN)的研究者,我一直在探索如何将GraphRAG(Graph Retrieval-Augmented Generation)模型应用于各种NLP任务。GraphRAG结合了图检索和序列生成技术,能够有效地处理复杂的语言理解和生成任务。本文将从个人角度出发,探讨GraphRAG在构建问答系统、文本摘要、情感分析和自动文本生成等任务中的具体方法和案例研究。
797 5
|
自然语言处理 Python
如何使用自然语言处理库`nltk`进行文本的基本处理
这段Python代码展示了如何使用`nltk`库进行文本的基本处理,包括分词和词频统计。首先需要安装`nltk`库,然后通过`word_tokenize`方法将文本拆分为单词,并使用`FreqDist`类统计每个单词的出现频率。运行代码后,会输出每个词的出现次数,帮助理解文本的结构和常用词。
569 1
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
544 2
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用与挑战
【10月更文挑战第3天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将分析NLP的基本原理,介绍AI技术如何推动NLP的发展,并讨论当前的挑战和未来的趋势。通过本文,读者将了解AI技术在NLP中的重要性,以及如何利用这些技术解决实际问题。
|
存储 人工智能 自然语言处理
Pandas数据应用:自然语言处理
本文介绍Pandas在自然语言处理(NLP)中的应用,涵盖数据准备、文本预处理、分词、去除停用词等常见任务,并通过代码示例详细解释。同时,针对常见的报错如`MemoryError`、`ValueError`和`KeyError`提供了解决方案。适合初学者逐步掌握Pandas与NLP结合的技巧。
690 20
|
自然语言处理 API C++
阿里通义推出SmartVscode插件,自然语言控制VS Code,轻松开发应用,核心技术开源!
SmartVscode插件深度解析:自然语言控制VS Code的革命性工具及其开源框架App-Controller
2912 1
阿里通义推出SmartVscode插件,自然语言控制VS Code,轻松开发应用,核心技术开源!
|
自然语言处理 算法 Python
自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
【10月更文挑战第9天】自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
632 4
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在自然语言处理中的创新应用
【10月更文挑战第7天】本文将深入探讨人工智能在自然语言处理领域的最新进展,揭示AI技术如何改变我们与机器的互动方式,并展示通过实际代码示例实现的具体应用。
394 1