基于简单的计算sentence间的相似度,并进行page ranking实现抽取文章摘要。使用jieba库实现抽取关键词。可以有很多优化的点,后面慢慢更新吧。

具体理论解析可以参考抽取式文档摘要方法(一)_仲夏199603的博客-CSDN博客_抽取式摘要

#/usr/bin/python
# encoding: UTF-8
import re
import math
import jieba
import jieba.analyse
import numpy as np
import networkx as nx
import random
import sysclass DocumentHandler:def __init__(self, file_path):self.full_text = ''self.read_file(file_path)# read data from filedef read_file(self, file_path):fi = open(file_path, 'r+', encoding='UTF-8')self.full_text = fi.read()fi.close()# split text as sentencesdef split_sentence(self, full_text):sents = re.split(u'[\n。]', full_text)sents = [sent for sent in sents if len(sent) > 0]return sents# calculate similaritydef cal_sim(self, word_list_1, word_list_2):occur_sum = 0word_set_1 = list(set(word_list_1))word_set_2 = list(set(word_list_2))for word in word_set_1:if word in word_set_2:occur_sum += 1.0if occur_sum < 1e-6:return 0.0denominator = math.log(len(word_set_1)) + math.log(len(word_set_2))if abs(denominator) < 1e-6:return 0.0return occur_sum / denominator# ranking sentcesdef text_rank(self, sentences, top_num = 5, pagerank_config={'alpha': 0.85}):sents_num = len(sentences)sorted_sents = []sent_word_list = []# split sentece to word listfor sent in sentences:words = []cut_res = jieba.cut(sent)for cut in cut_res:words.append(cut)sent_word_list.append(words)# calculate simiaritysim_graph = np.zeros((sents_num, sents_num))for x in range(sents_num):for y in range(x, sents_num):similarity = self.cal_sim(sent_word_list[x], sent_word_list[y])sim_graph[x, y] = similaritysim_graph[y, x] = similarity# do page rankingnx_graph = nx.from_numpy_matrix(sim_graph)scores = nx.pagerank(nx_graph, **pagerank_config)sorted_scores = sorted(scores.items(), key=lambda item: item[1], reverse=True)# get top sentences based on page ranking# Attention: you can do break in for loop to get top nfor index, score in sorted_scores:item = {"sent": sentences[index], "score": score, "index": index}sorted_sents.append(item)return sorted_sents[:top_num]# try to extract abstract from textdef extract_abstracts(self, full_text, top_num = 5):sents = self.split_sentence(full_text)rank_res = self.text_rank(sents, top_num=top_num)sorted_res = sorted(rank_res, key=lambda x: x['index'], reverse=False)return sorted_res# get abstract of articledef getAbstract(self, top_num = 5):res = self.extract_abstracts(self.full_text, top_num=top_num)abstract = ""for content in res:abstract = abstract + content["sent"] + "。"return abstract.strip()# get keywords of article, using jieba for Chinese article processingdef getKeywords(self, top_num = 5):tfidf = jieba.analyse.extract_tagskeywords = tfidf(self.full_text)tmpKeywords = []# Attention: you can break for loop to get top nfor keyword in keywords:if len(keyword) < 5:tmpKeywords.append(keyword)return tmpKeywords[:top_num]# main processor
def main(file_path):docHandler = DocumentHandler(file_path)print(docHandler.getAbstract())print(docHandler.getKeywords())if __name__ == '__main__':if len(sys.argv) < 2:print('Usage: python digist_keyword.py <file path>')sys.exit()file_path = sys.argv[1] # the folder to store your plain text filesmain(file_path)

使用百度百科的“百度”词条进行了测试,测试结果如下:

从创立之初,百度便将“让人们最平等便捷地获取信息,找到所求”作为自己的使命,成立以来,公司秉承“用户至上”的理念,不断坚持技术创新,致力于为用户提供“简单可依赖”的互联网搜索产品及服务,其中包括:以网络搜索为主的功能性搜索;以贴吧为主的社区搜索,针对各区域、行业所需的垂直搜索;以及门户频道、IM等,全面覆盖了中文网络世界所有的搜索需求。作为一家以技术为信仰的高科技公司,百度将技术创新作为立身之本,着力于互联网核心技术突破与人才培养,在搜索、人工智能、云计算、大数据等技术领域处于全球领先水平。百度是用户获取信息的最主要入口,随着移动互联网的发展,百度网页搜索完成了由PC向移动的转型,由连接人与信息扩展到连接人与服务,用户可以在PC、Pad、手机上访问百度主页,通过文字、语音、图像多种交互方式瞬间找到所需要的信息和服务。作为百度旗下核心产品,hao123及时收录包括音乐、视频、小说、游戏等热门分类的网站,与搜索完美结合,为中国互联网用户提供最简单便捷的网上导航服务,重新定义了上网导航的概念。百度商业服务是原有的百度推广(以搜索推广为主)的基础上,将数据产品、交易产品、媒体产品、信用产品和咨询服务进行了深度的整合, 并已将咨询服务、百度内容联盟加入到整体的商业服务框架中来。
['百度', '搜索', '服务', '用户', '互联网']

参考地址:LiveToolkit

简单的抽取中文摘要及关键词的方法相关推荐

  1. 【写作技巧】中文摘要及关键词的撰写

    1.撰写摘要的注意事项 2.如何选取关键词 3.哪些不能作为关键词? 注意,分隔关键词的标点符号,有的学校要求用",",有的学校要求用":",但最后一个关键词后 ...

  2. 如何使用Latex完成标题,摘要,关键词,图片插入,数学公式插入,表格插入等等

    1.设置字体.纸张格式.文本类型等等 如: \documentclass[10pt,twocolumn,twoside]{IEEEtran} 10pt代表字体大小,twocolumn表示分成两栏,tw ...

  3. 文本摘要常用数据集和方法研究综述

    [1]侯圣峦,张书涵,费超群.文本摘要常用数据集和方法研究综述[J].中文信息学报,2019,33(05):1-16. 文章目录 LCSTS 数据集定义 NLPCC 数据集定义 自建数据集及其对应方法 ...

  4. BART中文摘要生成,(nplcc与LCSTS数据集)

    1 训练 import tqdm from datasets import load_dataset import lawrougeimport datasets import random impo ...

  5. 悟空分词与mysql结合_中文分词与关键词提取实践小结

    本文基于题库查重需求实现过程及<NLP自然语言处理原理与实践>学习过程总结得出.定有不足之处,恳请指出. 基本概念 评价指标 一般,中文分词从Precision.Recall.F-scor ...

  6. 论文撰写(1)——撰写摘要、关键词和引言

    一.摘要的撰写 摘要 是 以 提供论文梗概为目的,简明.确切地记述论文重要内容的短文.虽然只有几百字,却拥有与论文同等量的信息.摘要的内容应重点包括4个要素: 1. 目 的- 研究的目的和任务,所涉及 ...

  7. Discuz! 在线中文分词、关键词提取服务

    不同于使用自己的服务器进行分词,Discuz!在线中文分词服务是基于API返回分词结果的.在项目中,我们只需要一个函数即可方便地进行分词.关键词提取. 以下是根据Discuz!在线分词服务API写的函 ...

  8. Word编辑论文,实现1.题目、摘要、关键词为通栏,正文为双栏 2.首页底端添加通栏脚注,在脚注中写作者简介,并使其实现悬挂对齐效果

    Q1. 如何使题目.摘要.关键词为通栏,而下面开始的正文为双栏? 将光标移动到最后一个关键词后 布局-分隔符-分节符(连续) 将光标移动到正文第一个大标题前 布局-页面设置-文档网格-文字排列-栏数设 ...

  9. 关于使用 trados 抽取 中文术语 的方法

    关于使用 trados  进行 术语抽取 的方法 以MultiTerm Extract 为例, 在让MultiTerm处理中文之前, 先对中文文本分词, 这样效果会好些. 再完美一点的, 还可以用Tr ...

最新文章

  1. Cisco ACL 一例
  2. 计算机中算术逻辑单元负责,算术逻辑单元
  3. thinkphp5是不是php,我对ThinkPHP5和Laravel5的一些看法
  4. 聊聊storm的LoggingMetricsConsumer
  5. el-popover可以设高度_家用餐厅吧台桌高度一般多少?吧台设计需要注意哪些?...
  6. 腾讯AI Lab副主任俞栋:语音识别领域的现状与进展
  7. 段错误、内存泄漏、内存溢出、堆溢出、栈溢出
  8. C# 代理访问页面并获取数据
  9. light_oj 1236 求最小公倍数( lcm(a,b) )等于n的数对 素因数分解
  10. 摩托罗拉再裁员!仍坚守模块化手机业务
  11. swift语言 数组定义_如何在Swift中声明弱引用数组?
  12. SparkSQL入门
  13. 逸管家坚守诚信是中小企业走上持续发展道路的准则
  14. 使用Matlab绘制gif动图
  15. 新浪微博开发平台基于php的sdk包(包含demo程序),新浪微博API开发简介之用户授权(PHP基础篇)_PHP教程...
  16. sqldbx mysql 乱码_sqlDbx连接mysql 及乱码
  17. 如何以身作则,做孩子的榜样
  18. win7系统问题:——桌面壁纸变黑解决方案
  19. 前端学习-品优购实践
  20. MySQL [1093] You can‘t specify target table ‘titles_test‘ for update in FROM clause

热门文章

  1. css设置鼠标的样式
  2. Java中mediaplayer_MediaPlayer 用法(一) - 一切皆有可能 - JavaEye技术网站
  3. c++ 获取当前时间,并定时关闭程序,重新打开
  4. windows server2008 定时关闭程序
  5. 电气器件系列五:ups电源
  6. fusioncharts java_FusionCharts在Java中的基本使用
  7. Wacom将在CES 2015上发布全新旗舰版Cintiq
  8. 全球最被看好的十大垂直搜索引擎
  9. C语言程序:评委打分类题型
  10. 小知识分享:adb uiautomator 命令 dump ui 树信息