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


凤求凰
凤求凰 2022-09-19 14:23:20 51732
分类专栏: 资讯

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

目录

输出结果

设计思路

核心代码


输出结果

1、测试文本

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

设计思路

后期更新……

核心代码

  1. def sent_tokenizer(texts):
  2. start=0
  3. i=0每个字符的位置
  4. sentences=[]
  5. punt_list='.!?。!?'.encode('utf-8') ',.!?:;~,。!?:;~'.decode('utf8')
  6. punt_lists='.!?。!?'.decode()
  7. for text in texts:
  8. if text in punt_list and token not in punt_list: 检查标点符号下一个字符是否还是标点
  9. sentences.append(texts[start:i+1])当前标点符号位置
  10. start=i+1start标记到下一句的开头
  11. i+=1
  12. else:
  13. i+=1若不是标点符号,则字符位置继续前移
  14. token=list(texts[start:i+2]).pop()取下一个字符
  15. if start<len(texts):
  16. sentences.append(texts[start:])这是为了处理文本末尾没有标点符号的情况
  17. return sentences
  18. def load_stopwordslist(path):
  19. print('load stopwords...')
  20. stoplist=[line.strip() for line in codecs.open(path,'r',encoding='utf8').readlines()]
  21. stopwrods={}.fromkeys(stoplist)
  22. return stopwrods
  23. def summarize(text):
  24. stopwords=load_stopwordslist('stopwords.txt')
  25. sentences=sent_tokenizer(text)
  26. words=[w for sentence in sentences for w in jieba.cut(sentence) if w not in stopwords if len(w)>1 and w!='\t']
  27. wordfre=nltk.FreqDist(words)
  28. topn_words=[w[0] for w in sorted(wordfre.items(),key=lambda d:d[1],reverse=True)][:N]
  29. scored_sentences=_score_sentences(sentences,topn_words)
  30. approach 1,利用均值和标准差过滤非重要句子
  31. avg=numpy.mean([s[1] for s in scored_sentences])均值
  32. std=numpy.std([s[1] for s in scored_sentences])标准差
  33. mean_scored=[(sent_idx,score) for (sent_idx,score) in scored_sentences if score>(avg+0.5*std)]
  34. approach 2,返回top n句子
  35. top_n_scored=sorted(scored_sentences,key=lambda s:s[1])[-TOP_SENTENCES:]
  36. top_n_scored=sorted(top_n_scored,key=lambda s:s[0])
  37. 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])
  38. def _score_sentences(sentences,topn_words):
  39. scores=[]
  40. sentence_idx=-1
  41. for s in [list(jieba.cut(s)) for s in sentences]:
  42. sentence_idx+=1
  43. word_idx=[]
  44. for w in topn_words:
  45. try:
  46. word_idx.append(s.index(w))关键词出现在该句子中的索引位置
  47. except ValueError:w不在句子中
  48. pass
  49. word_idx.sort()
  50. if len(word_idx)==0:
  51. continue
  52. 对于两个连续的单词,利用单词位置索引,通过距离阀值计算族
  53. clusters=[]
  54. cluster=[word_idx[0]]
  55. i=1
  56. while i<len(word_idx):
  57. if word_idx[i]-word_idx[i-1]<CLUSTER_THRESHOLD:
  58. cluster.append(word_idx[i])
  59. else:
  60. clusters.append(cluster[:])
  61. cluster=[word_idx[i]]
  62. i+=1
  63. clusters.append(cluster)
  64. 对每个族打分,每个族类的最大分数是对句子的打分
  65. max_cluster_score=0
  66. for c in clusters:
  67. significant_words_in_cluster=len(c)
  68. total_words_in_cluster=c[-1]-c[0]+1
  69. score=1.0*significant_words_in_cluster*significant_words_in_cluster/total_words_in_cluster
  70. if score>max_cluster_score:
  71. max_cluster_score=score
  72. scores.append((sentence_idx,max_cluster_score))
  73. return scores;
文章知识点与官方知识档案匹配,可进一步学习相关知识

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=2956
赞同 0
评论 0 条
凤求凰L0
粉丝 0 发表 11 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2691
【软件正版化】软件正版化工作要点  2655
统信UOS试玩黑神话:悟空  2559
信刻光盘安全隔离与信息交换系统  2247
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1117
grub引导程序无法找到指定设备和分区  769
江波龙2025届校园招聘宣讲会行程大放送  28
点击报名 | 京东2025校招进校行程预告  25
海康威视2025校招|海康机器人,邀你共创工业智能化未来!  24
金山办公2024算法挑战赛 | 报名截止日期更新  22
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!