最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python根據(jù)文章標(biāo)題內(nèi)容自動(dòng)生成摘要的實(shí)例

 更新時(shí)間:2019年02月21日 10:16:08   作者:周小董  
今天小編就為大家分享一篇python根據(jù)文章標(biāo)題內(nèi)容自動(dòng)生成摘要的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

text.py

方法一:根據(jù)標(biāo)題內(nèi)容生成摘要

# -*- coding: utf-8 -*-
import jieba,copy,re,codecs
from collections import Counter

from text import title,text


class Summary():
 #**** 切分句子 ************
 def cutSentence(self,text):
  sents = []
  text = re.sub(r'\n+','。',text) # 換行改成句號(hào)(標(biāo)題段無句號(hào)的情況)
  text = text.replace('。。','。') # 刪除多余的句號(hào)
  text = text.replace('?。','。') #
  text = text.replace('!。','。') # 刪除多余的句號(hào)
  sentences = re.split(r'。|!|?|】|;',text) # 分句
  #print(sentences)
  sentences = sentences[:-1] # 刪除最后一個(gè)句號(hào)后面的空句
  for sent in sentences:
   len_sent = len(sent)
   if len_sent < 4: # 刪除換行符、一個(gè)字符等
    continue
   # sent = sent.decode('utf8')
   sent = sent.strip('  ')
   sent = sent.lstrip('【')
   sents.append(sent)
  return sents

 #**** 提取特征詞 **********************
 def getKeywords(self,title,sentences,n=10):
  words = []
  #**** 分詞,獲取詞匯列表 *****
  # split_result = pseg.cut(text)
  for sentence in sentences:
   split_result = jieba.cut(sentence)
   for i in split_result:
    words.append(i)
  #**** 統(tǒng)計(jì)詞頻TF *****
  c = Counter(words) # 詞典
  #**** 去除停用詞(為了提高效率,該步驟放到統(tǒng)計(jì)詞頻之后)
  self.delStopwords(c)
  #**** 標(biāo)題中提取特征 *********
  words_title = [word for word in jieba.cut(title,cut_all=True)]
  self.delStopwords(words_title)
  #**** 獲取topN ************
  topN = c.most_common(n)
  # for i in topN:
  #  print(i[0],i[1])
  words_topN = [i[0] for i in topN if i[1]>1] #在topN中排除出現(xiàn)次數(shù)少于2次的詞

  words_topN = list(set(words_topN)|set(words_title)) # 正文關(guān)鍵詞與標(biāo)題關(guān)鍵詞取并集

  print (' '.join(words_topN))
  return words_topN

 #**** 去除停用詞 *******************************
 def delStopwords(self,dict):
  sw_file = codecs.open('stopwords.txt',encoding='utf8')
  stop_words = []
  for line in sw_file.readlines():
   stop_words.append(line.strip())
  #***** 輸入?yún)?shù)為list *************
  # if type(dict) is types.ListType:
  if type(dict) is list:
   words = dict
   for word in words:
    if word in stop_words:
     words.remove(word)
  #***** 輸入?yún)?shù)type為 <class 'collections.Counter'> *****
  else:
   words = copy.deepcopy(list(dict.keys()))
   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)
  #**** 初始化句子重要性得分,并計(jì)算句子平均長(zhǎng)度
  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
   if len_max < l:
    len_max = l
  len_avg = len_avg / len_sentences
  # print(len_min,len_avg,len_max)
  #**** 計(jì)算句子權(quán)重得分 **********
  for sent in sentences:
   #**** 不考慮句長(zhǎng)在指定范圍外的句子 ******
   l = len(sent)
   if l < (len_min + len_avg) / 2 or l > (3 * len_max - 2 * len_avg) / 4:
    continue
   words = []
   sent_words = jieba.cut(sent) # <generator object cut at 0x11B38120>
   for i in sent_words:
    words.append(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 sentences.index(sent) == 0:# 提高首句權(quán)重
    sents_score[sent] = 2 * score
  #**** 排序 **********************
  dict_list = sorted(sents_score.items(),key=lambda x:x[1],reverse=True)
  # print(dict_list)
  #**** 返回topN ******************
  sents_topN = []
  for i in dict_list[:n]:
   sents_topN.append(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

 #**** 恢復(fù)topN句子在文中的相對(duì)順序 *********
 def sents_sort(self,sents_topN,sentences):
  keysents = []
  for sent in sentences:
   if sent in sents_topN and sent not in keysents:
    keysents.append(sent)
  keysents = self.post_processing(keysents)

  return keysents

 def post_processing(self,keysents):
  #**** 刪除不完整句子中的詳細(xì)部分 ********************
  detail_tags = [',一是',':一是',',第一,',':第一,',',首先,',';首先,']
  for i in keysents:
   for tag in detail_tags:
    index = i.find(tag)
    if index != -1:
     keysents[keysents.index(i)] = i[:index]
  #**** 刪除編號(hào) ****************************
  for i in keysents:
   # print(i)
   regex = re.compile(r'^一、|^二、|^三、|^三、|^四、|^五、|^六、|^七、|^八、|^九、|^十、|^\d{1,2}、|^\d{1,2} ')
   result = re.findall(regex,i)
   if result:
    keysents[keysents.index(i)] = re.sub(regex,'',i)
  #**** 刪除備注性質(zhì)的句子 ********************
  for i in keysents:
   regex = re.compile(r'^注\d*:')
   result = re.findall(regex,i)
   if result:
    keysents.remove(i)
  #**** 刪除句首括號(hào)中的內(nèi)容 ********************
  for i in keysents:
   regex = re.compile(r'^\[.*\]')
   result = re.findall(regex,i)
   if result:
    keysents[keysents.index(i)] = re.sub(regex,'',i)
  #**** 刪除來源(空格前的部分) ********************
  for i in keysents:
   regex = re.compile(r'^.{1,20} ')
   result = re.findall(regex,i)
   if result:
    keysents[keysents.index(i)] = re.sub(regex,'',i)
  #**** 刪除引號(hào)部分(如:銀行間債市小幅下跌,見下圖:) ********************
  for i in keysents:
   regex = re.compile(r',[^,]+:$')
   result = re.findall(regex,i)
   if result:
    keysents[keysents.index(i)] = re.sub(regex,'',i)

  return keysents

 def main(self,title,text):
  sentences = self.cutSentence(text)
  keywords = self.getKeywords(title, sentences, n=8)
  sents_topN = self.getTopNSentences(sentences, keywords, n=3)
  keysents = self.sents_sort(sents_topN, sentences)
  print(keysents)
  return keysents


if __name__=='__main__':
 summary=Summary()
 summary.main(title,text)

python根據(jù)文章標(biāo)題內(nèi)容自動(dòng)生成摘要

方法二:根據(jù)內(nèi)容生成摘要

import pyhanlp
from text import text

summary = pyhanlp.HanLP.extractSummary(text, 3)
print(summary)

python根據(jù)文章標(biāo)題內(nèi)容自動(dòng)生成摘要

以上這篇python根據(jù)文章標(biāo)題內(nèi)容自動(dòng)生成摘要的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python語言中的重要函數(shù)對(duì)象用法小結(jié)

    Python語言中的重要函數(shù)對(duì)象用法小結(jié)

    Python作為一種強(qiáng)大的編程語言,提供了多種高級(jí)函數(shù)對(duì)象,如lambda匿名函數(shù)、map()、reduce()函數(shù),以及迭代器和生成器的使用,本文給大家介紹Python語言中的重要函數(shù)對(duì)象用法,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 使用python制作九九乘法表的四種方法小結(jié)

    使用python制作九九乘法表的四種方法小結(jié)

    九九乘法表是初學(xué)者學(xué)習(xí)編程的必要練手題目之一,因此各種語言都有對(duì)應(yīng)的實(shí)現(xiàn)方式,而 Python 也不例外,在 Python 中,我們可以使用多種方式來生成一個(gè)簡(jiǎn)單的九九乘法表,本文給大家總結(jié)了使用python制作九九乘法表的四種方法,需要的朋友可以參考下
    2024-03-03
  • 基于Python實(shí)現(xiàn)經(jīng)典植物大戰(zhàn)僵尸游戲

    基于Python實(shí)現(xiàn)經(jīng)典植物大戰(zhàn)僵尸游戲

    這篇文章主要介紹了如何利用Python實(shí)現(xiàn)植物大戰(zhàn)僵尸游戲,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2022-05-05
  • Python數(shù)據(jù)結(jié)構(gòu)之棧詳解

    Python數(shù)據(jù)結(jié)構(gòu)之棧詳解

    棧和隊(duì)列是在程序設(shè)計(jì)中常見的數(shù)據(jù)類型,從數(shù)據(jù)結(jié)構(gòu)的角度來講,棧和隊(duì)列也是線性表,是操作受限的線性表。本文將詳細(xì)介紹一下Python中的棧,感興趣的可以了解一下
    2022-03-03
  • Python從list類型、range()序列簡(jiǎn)單認(rèn)識(shí)類(class)【可迭代】

    Python從list類型、range()序列簡(jiǎn)單認(rèn)識(shí)類(class)【可迭代】

    這篇文章主要介紹了Python從list類型、range()序列簡(jiǎn)單認(rèn)識(shí)類(class),結(jié)合實(shí)例形式分析了list、range及自定義類等可迭代數(shù)據(jù)類型相關(guān)使用技巧,需要的朋友可以參考下
    2019-05-05
  • Python Django框架模板渲染功能示例

    Python Django框架模板渲染功能示例

    這篇文章主要介紹了Python Django框架模板渲染功能,結(jié)合實(shí)例形式分析了Django框架模板渲染相關(guān)的配置、視圖調(diào)用、變量賦值等相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • 詳解Python如何使用Netmiko進(jìn)行文件傳輸

    詳解Python如何使用Netmiko進(jìn)行文件傳輸

    Netmiko是一個(gè)用于連接和管理各種網(wǎng)絡(luò)設(shè)備的Python庫,它是Paramiko的一個(gè)擴(kuò)展。本文就來講講如何利用Netmiko實(shí)現(xiàn)文件傳輸功能吧
    2023-05-05
  • Python實(shí)現(xiàn)本地緩存的幾種方法小結(jié)

    Python實(shí)現(xiàn)本地緩存的幾種方法小結(jié)

    緩存是一種常見的技術(shù),用于存儲(chǔ)重復(fù)請(qǐng)求的結(jié)果,Python 作為一種靈活的編程語言,提供了多種實(shí)現(xiàn)本地緩存的方法,本文將探討 Python 中實(shí)現(xiàn)本地緩存的幾種策略,并提供具體的代碼示例,感興趣的小伙伴跟著小編一起來看看吧
    2024-07-07
  • 基于python編寫的五個(gè)拿來就能用的炫酷表白代碼分享

    基于python編寫的五個(gè)拿來就能用的炫酷表白代碼分享

    七夕快到了,所以本文小編將給給大家介紹五種拿來就能用的炫酷表白代碼,無限彈窗表白,愛心發(fā)射,心動(dòng)表白,玫瑰花等表白代碼,需要的小伙伴快來試試吧
    2023-08-08
  • python中requests小技巧

    python中requests小技巧

    Requests 使用的是 urllib3,因此繼承了它的所有特性。Requests 支持 HTTP 連接保持和連接池,支持使用 cookie 保持會(huì)話,支持文件上傳,支持自動(dòng)確定響應(yīng)內(nèi)容的編碼,支持國際化的 URL 和 POST 數(shù)據(jù)自動(dòng)編碼?,F(xiàn)代、國際化、人性化。
    2017-05-05

最新評(píng)論

绥芬河市| 镇安县| 泰和县| 当涂县| 若尔盖县| 澳门| 无锡市| 浦北县| 洮南市| 芮城县| 阿鲁科尔沁旗| 呈贡县| 遂宁市| 蒙山县| 平乡县| 怀来县| 宾川县| 社旗县| 永安市| 西丰县| 无为县| 沁水县| 遂溪县| 九龙城区| 贵阳市| 泰来县| 德格县| 建德市| 文山县| 虎林市| 罗田县| 阜阳市| 张家界市| 无锡市| 南川市| 综艺| 永丰县| 剑河县| 东光县| 盘山县| 宜城市|