简单的抽取中文摘要及关键词的方法
基于简单的计算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.撰写摘要的注意事项 2.如何选取关键词 3.哪些不能作为关键词? 注意,分隔关键词的标点符号,有的学校要求用",",有的学校要求用":",但最后一个关键词后 ...
- 如何使用Latex完成标题,摘要,关键词,图片插入,数学公式插入,表格插入等等
1.设置字体.纸张格式.文本类型等等 如: \documentclass[10pt,twocolumn,twoside]{IEEEtran} 10pt代表字体大小,twocolumn表示分成两栏,tw ...
- 文本摘要常用数据集和方法研究综述
[1]侯圣峦,张书涵,费超群.文本摘要常用数据集和方法研究综述[J].中文信息学报,2019,33(05):1-16. 文章目录 LCSTS 数据集定义 NLPCC 数据集定义 自建数据集及其对应方法 ...
- BART中文摘要生成,(nplcc与LCSTS数据集)
1 训练 import tqdm from datasets import load_dataset import lawrougeimport datasets import random impo ...
- 悟空分词与mysql结合_中文分词与关键词提取实践小结
本文基于题库查重需求实现过程及<NLP自然语言处理原理与实践>学习过程总结得出.定有不足之处,恳请指出. 基本概念 评价指标 一般,中文分词从Precision.Recall.F-scor ...
- 论文撰写(1)——撰写摘要、关键词和引言
一.摘要的撰写 摘要 是 以 提供论文梗概为目的,简明.确切地记述论文重要内容的短文.虽然只有几百字,却拥有与论文同等量的信息.摘要的内容应重点包括4个要素: 1. 目 的- 研究的目的和任务,所涉及 ...
- Discuz! 在线中文分词、关键词提取服务
不同于使用自己的服务器进行分词,Discuz!在线中文分词服务是基于API返回分词结果的.在项目中,我们只需要一个函数即可方便地进行分词.关键词提取. 以下是根据Discuz!在线分词服务API写的函 ...
- Word编辑论文,实现1.题目、摘要、关键词为通栏,正文为双栏 2.首页底端添加通栏脚注,在脚注中写作者简介,并使其实现悬挂对齐效果
Q1. 如何使题目.摘要.关键词为通栏,而下面开始的正文为双栏? 将光标移动到最后一个关键词后 布局-分隔符-分节符(连续) 将光标移动到正文第一个大标题前 布局-页面设置-文档网格-文字排列-栏数设 ...
- 关于使用 trados 抽取 中文术语 的方法
关于使用 trados 进行 术语抽取 的方法 以MultiTerm Extract 为例, 在让MultiTerm处理中文之前, 先对中文文本分词, 这样效果会好些. 再完美一点的, 还可以用Tr ...
最新文章
- Cisco ACL 一例
- 计算机中算术逻辑单元负责,算术逻辑单元
- thinkphp5是不是php,我对ThinkPHP5和Laravel5的一些看法
- 聊聊storm的LoggingMetricsConsumer
- el-popover可以设高度_家用餐厅吧台桌高度一般多少?吧台设计需要注意哪些?...
- 腾讯AI Lab副主任俞栋:语音识别领域的现状与进展
- 段错误、内存泄漏、内存溢出、堆溢出、栈溢出
- C# 代理访问页面并获取数据
- light_oj 1236 求最小公倍数( lcm(a,b) )等于n的数对 素因数分解
- 摩托罗拉再裁员!仍坚守模块化手机业务
- swift语言 数组定义_如何在Swift中声明弱引用数组?
- SparkSQL入门
- 逸管家坚守诚信是中小企业走上持续发展道路的准则
- 使用Matlab绘制gif动图
- 新浪微博开发平台基于php的sdk包(包含demo程序),新浪微博API开发简介之用户授权(PHP基础篇)_PHP教程...
- sqldbx mysql 乱码_sqlDbx连接mysql 及乱码
- 如何以身作则,做孩子的榜样
- win7系统问题:——桌面壁纸变黑解决方案
- 前端学习-品优购实践
- MySQL [1093] You can‘t specify target table ‘titles_test‘ for update in FROM clause
热门文章
- css设置鼠标的样式
- Java中mediaplayer_MediaPlayer 用法(一) - 一切皆有可能 - JavaEye技术网站
- c++ 获取当前时间,并定时关闭程序,重新打开
- windows server2008 定时关闭程序
- 电气器件系列五:ups电源
- fusioncharts java_FusionCharts在Java中的基本使用
- Wacom将在CES 2015上发布全新旗舰版Cintiq
- 全球最被看好的十大垂直搜索引擎
- C语言程序:评委打分类题型
- 小知识分享:adb uiautomator 命令 dump ui 树信息