jieba库用于自动摘要生成

jieba库用于自动摘要生成


2023年12月3日发(作者:蓝魔腾)

jieba库用于自动摘要生成自动生成摘要摘要自动生成// An highlighted block# -*- coding: utf-8 -*-import jieba,copy,re,codecsfrom collections import Countertitle='海上钢琴师'#title = '智能金融起锚:文因、数库、通联瞄准的kensho革命 ' #最后生成的东西和这个题目有关# coding = gbk#text = '''推进技术从精美的手表到书架式扬声器,快速发展的技术不断推出新的用途和先进的小工具,并不断推向市场。这就是我们今天世界的现实,你可以花一整天的时间通过销售科技产品的商店,这可以把你的家变成一个智能的房子。以下是最新的小工具,它们将让您走在科技前沿,让您的生活更美好:FITBIT

ALTA HR Fitbit Alta HR是一款可靠的健身追踪器,配有足够的电池汁,可让您长达一周。它监控您的步数,睡眠时间,燃烧的卡路里数和心率。腕带采用OLED显示屏,可与计算机无线同步。 NINTENDO NES CLASSIC EDITION这款Nintendo迷你游戏机通过为现代科技增添经典品味,带您回到过去。它包含30个经典的8位游戏,支持双人游戏,并允许怀旧游戏玩家通过HDMI连接到任何电视。 SHINOLA书架音箱新Shinola书架音箱是Shinola与工作室监听专家Barefoot Sound合作的成果。自供电双向扬声器不仅可以带来声音,还可以为客厅增添色彩,这要归功于它们整洁的手工橡木橱柜。它们配备了蓝牙,AUX和USB输入,为您提供一系列选项。 DELL XPS 13(2018)时尚。令人印象深刻。强大。持久。这款13英寸笔记本电脑具有足够的冲击力,可以方便地处理任何您扔的东西。 XPS 13的机身比几乎所有类型的笔记本电脑都小,几乎没有边框屏幕。 SAMSUNG GALAXY S9 +如果你需要的设备提供超出现有标准的东西并定义了高质量,那么你不应该看过三星Galaxy S9 +。它可能与S8 +有所不同,但这款智能手机本身就是一流的领导者。作为三星最新推出的产品,S9 +配备6.22英寸无限显示屏,配备革命性的2倍变焦背式摄像头,可捕捉逼真的图像。其3500mAh电池可在Wi-Fi和4G连接上为您提供长达15小时的互联网使用时间。 APPLE TV 4K苹果电视4K可以说是目前市场上最好的流媒体。该小工具可让您以4K HDR方式观看喜爱的节目,并提供远程和Siri语音选项,以获得优质体验。 SONOS PLAY:5无线多房间扬声器不会比Play:5更大。 Sonos的新产品不仅可以为您的房间充满丰富的声音,还可以为您提供全球80多种流媒体服务。您可以将小工具连接到Amazon Echo或Dot。有一个3.5毫米音频插座,旨在让您连接非流音频设备。'''file_object = open('',encoding='utf8')try: text= file_()finally: file_()# summary = tSummary(text, 3)# print(summary)class Summary(): #**** 切分句子 ************ def cutSentence(self,text): sents = [] text = (r'n+','。',text) # 换行改成句号(标题段无句号的情况) text = e('。。','。') # 删除多余的句号 text = e('?。','。') # text = e('!。','。') # 删除多余的句号 sentences = (r'。|!|?|】|;',text) # 分句 (碰到句号或感叹号或问号或】或分号就切分开) # print(sentences) sentences = sentences[:-1] # 删除最后一个句号后面的空句 for sent in sentences: len_sent = len(sent) if len_sent < 4: # 删除换行符、一个字符等 continue # sent = ('utf8') sent = ('  ') sent = ('【') (sent) # print(sent) # sent就是用句号,感叹号等等分开后的句子 return sents #**** 提取特征词 ********************** def getKeywords(self,title,sentences,n=10): words = [] #**** 分词,获取词汇列表 ***** # split_result = (text) # split_result = (text) for sentence in sentences: split_result = (sentence) for i in split_result: (i) #print(i) #这个i就是每个句子切分出来的一个个词 #**** 统计词频TF ***** c = Counter(words) # 词典 # print(c) #这个c得结果就包含了每个上面每个词出现的次数 即词频 #**** 去除停用词(为了提高效率,该步骤放到统计词频之后) pwords(c) # 这个delstopwords是自己定义的去除停用词的方法,传入的参数是一个记载词频的词典 #**** 标题中提取特征 ********* words_title = [word for word in (title,cut_all=True)] # print(words_title) # 是把题目title 切分之后的结果 pwords(words_title) #**** 获取topN ************ topN = _common(n) # topN 就是上面那个记录了词频的词典 c # for i in topN: # print(i[0],i[1]) words_topN = [i[0] for i in topN if i[1]>1] #在topN中排除出现次数少于2次的词 words_topN = list(set(words_topN)|set(words_title)) # 正文关键词与标题关键词取并集 #这个有些情况下可以不要, 具体检测标准是? 题目有时候可能不能很好地反映信息,这个题目与词频取并集有时候并不能达到很好的效果 # print (' '.join(words_topN)) print(' '.join(words_topN)) return words_topN #**** 去除停用词 ******************************* def delStopwords(self,dict): sw_file = ('',encoding='utf8') stop_words = [] for line in sw_nes(): stop_(()) #***** 输入参数为list ************* # if type(dict) is pe: if type(dict) is list: words = dict for word in words: if word in stop_words: (word)# 去除停用词 #***** 输入参数type为 ***** else: words = py(list(())) for word in words: if word in stop_words: del dict[word] return words #**** 提取topN句子 ********************** def getTopNSentences(self,sentences,keywords,n=3): sents_score = {} len_sentences = len(sentences) #**** 初始化句子重要性得分,并计算句子平均长度 len_avg = 0 len_min = len(sentences[0]) len_max = len(sentences[0]) for sent in sentences: sents_score[sent] = 0 l = len(sent) len_avg += l if len_min > l: len_min = l len_min = l if len_max < l: len_max = l len_avg = len_avg / len_sentences # print(len_min,len_avg,len_max) #**** 计算句子权重得分 ********** for sent in sentences: #**** 不考虑句长在指定范围外的句子 ****** l = len(sent) if l < (len_min + len_avg) / 2 or l > (3 * len_max - 2 * len_avg) / 4: continue words = [] sent_words = (sent) # for i in sent_words: (i) keywords_cnt = 0 len_sent = len(words) if len_sent == 0: continue for word in words: if word in keywords: keywords_cnt += 1 score = keywords_cnt * keywords_cnt * 1.0 / len_sent sents_score[sent] = score if (sent) == 0:# 提高首句权重 sents_score[sent] = 2 * score #**** 排序 ********************** dict_list = sorted(sents_(),key=lambda x:x[1],reverse=True) # print(dict_list) #**** 返回topN ****************** sents_topN = [] for i in dict_list[:n]: sents_(i[0]) # print i[0],i[1] sents_topN = list(set(sents_topN)) #**** 按比例提取 ************************** if len_sentences <= 5: sents_topN = sents_topN[:1] elif len_sentences < 9: sents_topN = sents_topN[:2] return sents_topN #**** 恢复topN句子在文中的相对顺序 ********* def sents_sort(self,sents_topN,sentences): keysents = [] for sent in sentences: if sent in sents_topN and sent not in keysents: (sent) keysents = _processing(keysents) return keysents def post_processing(self,keysents): #**** 删除不完整句子中的详细部分 ******************** detail_tags = [',一是',':一是',',第一,',':第一,',',首先,',';首先,'] for i in keysents: for tag in detail_tags: index = (tag) if index != -1: keysents[(i)] = i[:index] #**** 删除编号 **************************** for i in keysents: # print(i) # print(i) regex = e(r'^一、|^二、|^三、|^三、|^四、|^五、|^六、|^七、|^八、|^九、|^十、|^d{1,2}、|^d{1,2} ') result = l(regex,i) if result: keysents[(i)] = (regex,'',i) #**** 删除备注性质的句子 ******************** for i in keysents: regex = e(r'^注d*:') result = l(regex,i) if result: (i) #**** 删除句首括号中的内容 ******************** for i in keysents: regex = e(r'^.∗') result = l(regex,i) if result: keysents[(i)] = (regex,'',i) #**** 删除来源(空格前的部分) ******************** for i in keysents: regex = e(r'^.{1,20} ') result = l(regex,i) if result: keysents[(i)] = (regex,'',i) #**** 删除引号部分(如:银行间债市小幅下跌,见下图:) ******************** for i in keysents: regex = e(r',[^,]+:$') result = l(regex,i) if result: keysents[(i)] = (regex,'',i) return keysents def main(self,title,text): sentences = tence(text) keywords = words(title, sentences, n=8) sents_topN = NSentences(sentences, keywords, n=3) keysents = _sort(sents_topN, sentences) print(keysents) return keysentsif __name__=='__main__': summary=Summary() (title,text)使用指南:先要在你的这个项目目录底下创建一个文本文件,里面不写内容也行。再创建一个 ,放入你想要拆分的内容,最好是一段文字再运行就好啦。


发布者:admin,转转请注明出处:http://www.yc00.com/num/1701575082a1120477.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信