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

目录

输出结果

设计思路

核心代码


输出结果

1、测试文本

今天一大早,两位男子在故宫抽烟对镜头炫耀的视频在网络上传播,引发网友愤怒。有人感到后怕,600年的故宫真要这两个人给点了,万死莫赎。也有评论称,把无知当成炫耀的资本,丢人!
视频中两位男子坐在故宫公共休息区的遮阳伞下,面对镜头问出:“谁敢在故宫抽烟?”语气极其嚣张,表情带有挑衅意味。话音刚落,另外一位男子面向镜头吸了一口烟。而视频中两人也表示知道有故宫禁止吸烟的规定。
事实上,2013年5月18日是国际博物馆日,故宫从这一天开始至今一直实行全面禁烟。根据规定,故宫博物院全体员工在院合作单位和个人不管在室内和室外,也不分开放区与工作区,一律禁止吸烟,对违反禁止吸烟规定的人员将进行严格处罚并通报全院。
此外,在2015年6月1日起北京全市也开始了《控制吸烟条例》,规定公共场所工作场所室内环境室外排队等场合禁止吸烟,违者将最高被罚200元,全市统一设立举报电话12320。
视频在网络上传播开来,不少网友担心故宫的安危,称一旦发生火情,后果不堪设想,有网友表示,这样的行为应该被旅游景区拉近黑名单,建议终身禁止进入任何景区和各种场馆。

设计思路

后期更新……

核心代码

def sent_tokenizer(texts):start=0i=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+=1else:i+=1#若不是标点符号,则字符位置继续前移token=list(texts[start:i+2]).pop()#取下一个字符if start<len(texts):sentences.append(texts[start:])#这是为了处理文本末尾没有标点符号的情况return sentencesdef load_stopwordslist(path):print('load stopwords...')stoplist=[line.strip() for line in codecs.open(path,'r',encoding='utf8').readlines()]stopwrods={}.fromkeys(stoplist)return stopwrodsdef 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=-1for s in [list(jieba.cut(s)) for s in sentences]:sentence_idx+=1word_idx=[]for w in topn_words:try:word_idx.append(s.index(w))#关键词出现在该句子中的索引位置except ValueError:#w不在句子中password_idx.sort()if len(word_idx)==0:continue#对于两个连续的单词,利用单词位置索引,通过距离阀值计算族clusters=[]cluster=[word_idx[0]]i=1while 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+=1clusters.append(cluster)#对每个族打分,每个族类的最大分数是对句子的打分max_cluster_score=0for c in clusters:significant_words_in_cluster=len(c)total_words_in_cluster=c[-1]-c[0]+1score=1.0*significant_words_in_cluster*significant_words_in_cluster/total_words_in_clusterif score>max_cluster_score:max_cluster_score=scorescores.append((sentence_idx,max_cluster_score))return scores;

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

  1. python,基于http协议,最常用的是GET和POST两种方法

    基于http协议,最常用的是GET和POST两种方法. 接口文档需要包含哪些信息: 接口名称 接口功能 接口地址 支持格式 json/xml 请求方式 请求示例 请求参数(是否必填.数据类型.传递参数 ...

  2. html选择文本框后提示消失,两种方法实现文本框输入内容提示消失

    第一种方法: 基于HTML5 input标签的新特性 - placeholder .另外,x-webkit-speech 属性可以实现语音输入功能. 第二种方法: 用span模拟,定位span,借助J ...

  3. NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码

    NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码 目录 全部代码 相关文章 NLP之情感分析:基于python编程(jieba库)实现中文文本情 ...

  4. NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码

    NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)之全部代码 目录 全部代码 相关文章 NLP之TEA:基于python编程(jieba库)实现中文文本情感分 ...

  5. ​​​​​​​NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)

    NLP之TEA:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分) 目录 输出结果 设计思路 相关资料 1.关于代码 2.关于数据集 关于留言 1.留言内容的注意事项 2.如 ...

  6. NLP:基于snownlp库对文本实现提取文本关键词和文本摘要

    NLP:基于snownlp库对文本实现提取文本关键词和文本摘要 目录 输出结果 1.测试文本 设计思路 核心代码 输出结果 1.测试文本 今天一大早,两位男子在故宫抽烟对镜头炫耀的视频在网络上传播,引 ...

  7. NLP:基于textrank4zh库对文本实现提取文本关键词、文本关键短语和文本摘要

    NLP:基于textrank4zh库对文本实现提取文本关键词.文本关键短语和文本摘要 目录 输出结果 设计思路 核心代码 输出结果 关键词: 故宫 0.030737773083470445 镜头 0. ...

  8. python jieba库分词_Python基于jieba库进行简单分词及词云功能实现方法

    本文实例讲述了Python基于jieba库进行简单分词及词云功能实现方法.分享给大家供大家参考,具体如下: 目标: 1.导入一个文本文件 2.使用jieba对文本进行分词 3.使用wordcloud包 ...

  9. stm32 lwip 如何发送不出_mbedtls | 移植mbedtls库到STM32裸机的两种方法

    一.mbedtls 开源库 1. mbedtls是什么 Mbed TLS是一个开源.可移植.易于使用.代码可读性高的SSL库.可实现加密原语,X.509证书操作以及SSL / TLS和 DTLS 协议 ...

最新文章

  1. winstore独立安装包下载_QT使用教程(二)之下载篇
  2. 极客学院职业路径图课程视频下载-爬虫
  3. 浅谈前端安全问题及策略
  4. linux 设置变量在脚本之外可用,linux – 在ssh上运行脚本时,环境变量不可用
  5. webkit如何实现JS DOM binding—基于V8分析
  6. 支付宝支付 - 构建支付表单填并提交
  7. 一个图片展示效果的站点
  8. 人工智能领域论文常见基本概念笔记
  9. 微信小程序 - 自定义swiper(dot)指示点
  10. Android--多线程之Handler
  11. 编写JAVA脚本的JSP页面
  12. java计算器课程报告_java课程设计报告计算器设计.doc
  13. 自学android要多长时间,自学android开发,从零开始学Android
  14. Python社区发现—Louvain—networkx和community
  15. 怎样杀计算机病毒,如何彻底查杀计算机病毒
  16. gophp解释器_golang底层用什么语言实现的
  17. 【建议收藏】6款高质量Windows软件,好用到无法拒绝
  18. 太原学院计算机科学与技术在哪个校区,太原学院有几个校区及校区地址
  19. 千牛插件开发,千牛SDK开发。
  20. 【概念】权限管理模型(RBAC、ABAC、ACL)

热门文章

  1. Linux 发行版与Linux内核
  2. 在不知道根节点的情况下生成树形结构 (采用JSONObject)
  3. 一步步实施 DevOps (三)
  4. jQuery-DOM节点插入总结
  5. 2017.11.7 Python 制作EFM32/ AVR批量烧录工具
  6. 解析程序员的几个成长阶段
  7. 最小安装虚拟机命令行安装图形化
  8. JS特效 -- 网页图片飞起来
  9. SpringBoot与Spring的对比
  10. 强!分库分表与分布式数据库技术选项分析