您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關python如何根據文章標題內容自動生成摘要的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
text.py
title = '智能金融起錨:文因、數庫、通聯瞄準的kensho革命' text = '''2015年9月13日,39歲的鮑捷乘上從硅谷至北京的飛機,開啟了他心中的金融夢想。 鮑捷,人工智能博士后,如今他是文因互聯公司創始人兼CEO。和鮑捷一樣,越來越多的硅谷以及華爾街的金融和科技人才已經踏上了歸國創業征程。 在硅谷和華爾街,已涌現出Alphasense、Kensho等智能金融公司。 如今,這些公司已經成長為獨角獸。 大數據、算法驅動的人工智能已經進入到金融領域。人工智能有望在金融領域最新爆發。 前段時間,筆者寫完了《激蕩二十五年:Wind、同花順、東方財富、大智慧等金融服務商爭霸史》、《邊緣崛起:雪球、老虎、富途、牛股王等互聯網券商的新玩法》,探討了互聯網時代、移動互聯網時代創業者們的創想。 人工智能與金融正在融合,這里我們聚焦一下投研領域,后續會向交易、投顧等領域延展。這篇文章將描繪一下Kensho、文因互聯、數庫科技、通聯數據在這個領域的探索和嘗試,看看新時代正在掀起的巨浪。 1、Kensho的顛覆式革命 華爾街的Kensho是金融數據分析領域里誰也繞不過的一個獨角獸。這家公司獲得由高盛領投的6280萬美元投資,總融資高達7280萬美元。 33歲的Kensho創始人Daniel Nadler預言:在未來十年內,由于Kensho和其他自動化軟件,金融行業有三分之一到二分之一的雇員將失業。 2014年,Nadler在哈佛大學學習數學和古希臘文化。大學期間,他在美聯儲擔任訪問學者時驚奇地發現,這家全球最具權勢的金融監管機構仍然依靠Excel來對經濟進行分析。 當時,希臘選舉以及整個歐洲的不穩定局面正強烈沖擊金融市場。訪問期間,Nadler意識到無論是監管者還是銀行家,除了翻過去的新聞消息以外,并不能給出什么好的方案。 于是,他和麻省理工學院的好友一起想辦法,并借鑒Google的信息處理方法,來分析資本市場,設計出了Kensho軟件。 一個典型的工作場景是:早上八點,華爾街的金融分析師沖進辦公室,等待即將在8點半公布的勞工統計局月度就業報告。他打開電腦,用Kensho軟件搜集勞工部數據。 兩分鐘之內,一份Kensho自動分析報告便出現在他的電腦屏幕上:一份簡明的概覽,隨后是13份基于以往類似就業報告對投資情況的預測。 金融分析師們再無需檢查,因為Kensho提取的這些分析基于來自數十個數據庫的成千上萬條數據。 Kensho界面與Google相似,由一條簡單的黑色搜索框構成。其搜索引擎自動將發生的事件根據抽象特征進行分類。 福布斯報道過運用Kensho的成功案例。例如,英國脫歐期間,交易員成功運用Kensho了解到退歐選舉造成當地貨幣貶值;此外,Kensho還分析了美國總統任期的前100天內股票漲跌情況(見下圖): (圖片來源:福布斯) Kensho在構建金融與萬物的關聯,并用結構化、數據化的方式去呈現。公司還專門雇傭了一位機器學習專家,而這位專家此前為谷歌研究世界圖書館的大型分類方法。 處理復雜的事件與投資關聯,Kensho只需要幾分鐘。但是在華爾街一個普通的分析師需要幾天時間去測算對各類資產的影響。而這些分析師普遍拿著30—40萬美元的年薪。 此外,硅谷的創業公司AlphaSense公司已經悄然建成了一個解決專業信息獲取和解決信息碎片問題的金融搜索引擎。 AlphaSense的首席執行官Jack Kukko曾是摩根士丹利分析師,這賦予了其強大的金融基因。 AlphaSense可以搜索“研究文獻,包括公司提交的文件證明、演示、實時新聞、新聞報道、華爾街的投資研究、以及客戶的內部內容。” AlphaSense幾秒鐘內即可搜索數百萬個不同的財務文檔, 公司內部紕漏內容和賣方研究等,使用戶可以快速發現關鍵數據點,并通過智能提醒、跟蹤重要信息點、防止數據遺漏,做出關鍵的決策。 AlphaSense目前已經向包括摩根大通等投資和咨詢公司、全球銀行、律師事務所和公司(如甲骨文)等500余位客戶提供服務。 2、海歸博士的智能金融實驗 2017年6月,在北京朝陽區的一個居民樓的辦公室內,鮑捷和他的20名創業伙伴正在摸索打造一款智能金融分析工具,而他的目標正是華爾街的AlphaSense和Kensho。 41歲的鮑捷很享受創業,他說在中國這是最好的創業時代。在此之前,他有一段漫長的求學歷程。 鮑捷是一個信息整理控,他從小學開始整理所有的歷史人物、水文地理、卡通人物的關系等。合肥工業大學研究生階段,他師從德國斯圖加特大學歸來的博士高雋,學習人工智能,深度研究神經網絡。 2001年,他離開中國進入美國,先后為Lowa State Univ博士、RPI博士后、MIT訪問研究員、BBN訪問研究員,在美國完成了11年人工智能的學習和研究。他先后師從語義網創始人Jim Hendler和萬維網發明人、圖靈獎得主Tim Berners-Lee,參與了語義網學科形成期間的一些關鍵研究項目,并是知識圖譜國際標準OWL的作者之一。 2013年,在三星研究院工作不到兩年后,他開始了在硅谷的創業,研發了一款名為“好東西傳送門”的產品。 該產品主要利用機器人程序在網站抓取人工智能、機器學習、大數據的最新技術資訊,利用專業領域知識過濾后,自動生產內容,傳送至需要的人。 好東西傳送門獲取了數萬鐵粉,但無法盈利。2015年9月,他離開硅谷飛往北京,歸國的第一天,便獲得了無量資本100萬美元的天使輪融資。他在中國創立了“文因互聯”。 其實鮑捷很早就看到了人工智能和金融結合的前景。在2010年,他就提出了金融報表語言XBRL的語義模型。2015年底,他看到了Kensho在金融領域帶來的革命,結合國內的投資需求,他選擇了在新三板領域開始切入,當時只有7名員工,經過半年研發,文因在2016年5月推出了“快報”和“搜索”。 “快報”能夠自動抓取每日公告、財報、新聞資訊等;而“搜索”能夠自動提取產業鏈上下游公司、結構化財報等各類數據。 “這兩款產品為我們獲取了1萬鐵粉,雖然產品有很多缺陷,但是依舊很多人喜歡這個工具,因為以前沒有能夠滿足這種需求的服務。”鮑捷向華爾街見聞表示。 但是他們發現做搜索需要龐大的知識架構,需要去集成各種金融相關數據,開發公司標簽、產業標簽、產業鏈等復雜的知識圖譜,而做這個體系,再燒幾億,可能也無法完成。 更為恐怖的是,做完產品還要和金融信息服務商競爭。Wind、同花順、東方財富,擋在了文因互聯面前。 “我放棄了從頭到尾設計一個大系統的想法,而是從具體場景出發解決單點問題。從年底開始我分了一部分人去做項目,但每一個項目都是我們大系統里面的一個組件,這個項目根據金融客戶的真實需求去打磨,然后將這些組件整合為一個系統的產品。”鮑捷反思道,創業需要尋找用戶最痛的點,然后扎下去解決問題。 經過一年的創業,鮑捷變得更接地氣。去年下半年以來,他密集地拜訪各大銀行、基金、保險、券商,根據金融機構的需求,在標準化產品之上定制化,從具體業務的自動化出發走向智能化。 目前恒豐銀行、南京銀行、中債資信等均已成為文因互聯的合作客戶。 文因互聯很快根據金融機構的需求開發出了公告摘要、自動化報告、財報結構化數據等多個軟件產品,并開發出了投研小機器人。 2016年年底,文因互聯再次獲得睿鯨資本Pre-A輪融資。而這位睿鯨資本的投資人,曾經是鮑捷的網友,他們經常在一起討論人工智能問題。 鮑捷舉例說,深市、滬市、新三板加在一起每天平均大概3000-4000份公告,每天處理公告數據提取和摘要,這是一件非常繁瑣的事情。很多金融機構要養20多人處理公告,而且這些人還不能快速高效準確地處理。這類事情機器做最適合。給機器程序輸入金融知識,并通過模型訓練,能夠快速準確地提取各項公告摘要和年報摘要。 鮑捷表示,文因互聯長遠目標是Kensho,用人工智能提升金融投研效率和渠道效率,而這還有很長的路要走。 3、中國式創新距離Kensho有多遠? 上海的另外一位海歸,也選擇在金融研投領域創業,他叫劉彥,已經歸國創業了八年。 八年前,他創立的數庫科技,如今獲得了京東金融1000萬美元的投資。 2003年,23歲的他從密歇根商學院畢業,進入華爾街瑞信公司,一年后他主動調到香港分公司。 5年里,他主導完成了建設銀行、工商銀行、太平洋保險等大公司的上市項目。 華爾街2008年的金融危機波及全球,人性的貪婪和恐懼暴露無遺。在劉彥眼里,從數據層面到決策層面,每一個環節都充斥著被加工過的信息。2009年,他選擇回到上海創業。劉彥最初的野心很大,想構建中國的彭博終端,他花費兩年的時間構建完成“半結構化數據”。 2011年,數庫獲得穆迪資本500萬美元投資。很快,原公司從70人擴張到140人。但因數庫的戰略計劃并未完成,穆迪資本放棄進一步投資,他和聯合創始人沈鑫賣掉房子,繼續維持運營。 劉彥破釜沉舟,公司很快攻克了信息識別系統和精度抓取,并在深度分析等方面取得突破。 數庫科技試圖覆蓋全球上市公司:A股3218家、港股1993家美股4953家、新三板10725家、非上市金融490家、股權交易中心2467家。 目前,數庫主要服務于B端金融機構。數庫自稱核心獨家的產品有兩款:其一、SAM(Segment Analytics Mapping)行業分析工具。數庫是根據上市公司實際披露的產品分項推導出其行業分類,會根據上市公司的定期報告實時做出調整。數庫行業分類,分為10個層級,4000個產品節點,幫助投資者快速了解產業競爭環境、系統化對比公司財務及運營數據。其二、產業鏈的分析工具。數庫在行業分析工具SAM的基礎上,衍生出的一個分析工具。從產業鏈條的角度,將上市公司通過產品相互關聯,幫助投資人優先布局上下游的投資機會。 劉彥的終極理想是通過科技的發展,使金融從“投機”和“博弈”中逐漸走出來,走向非人為的自動化運行,把專業人士和投資弱勢群體之間的距離拉近,使個人擁有機構投資者的能力。 這兩年,科技金融成為創投最熱的風口。中國的大集團也瞄準了這個產業變革的機會。國內民營巨頭萬向集團看準了智能金融這個方向。 2011年,萬向集團挖來了時任博時基金總經理肖風,擔任萬向集團副董事長。他迅速構建起龐大的金融帝國:浙商銀行、浙商基金、民生人壽、萬向財務、通聯數據等公司。 2013年12月,注冊資本3億元的通聯數據在上海創立,肖峰為創始人兼董事長。 通聯數據的野心很龐大,目前員工達到300人,正面與Wind、同花順、東方財富競爭,并推出了PC和移動端的資產管理業務的一站式服務平臺,內容涵蓋大數據分析、智能投資研究、量化研究、智能投顧和資產配置管理服務等多個領域。 通聯數據認為,自己的核心是有一批高素質的技術人才,同時還有頂級金融人才。 2017年6月6日,恒生電子正式面向金融機構推出最新的人工智能產品:涵蓋智能投資、智能資訊、智能投顧、智能客服四大領域。其中一款產品智能小梵可通過強大人機自然交互,提供精準數據提煉及智能資訊分析。 在筆者的走訪中,越來越多高科技人才、金融人才進入智能金融投研領域,這個領域已經成為紅海。 誰能夠乘著人工智能浪潮,成為新一代的金融信息服務終端? 敬請關注后續報道。 '''
方法一:根據標題內容生成摘要
# -*- 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) # 換行改成句號(標題段無句號的情況) text = text.replace('。。','。') # 刪除多余的句號 text = text.replace('?。','。') # text = text.replace('!。','。') # 刪除多余的句號 sentences = re.split(r'。|!|?|】|;',text) # 分句 #print(sentences) sentences = sentences[:-1] # 刪除最后一個句號后面的空句 for sent in sentences: len_sent = len(sent) if len_sent < 4: # 刪除換行符、一個字符等 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) #**** 統計詞頻TF ***** c = Counter(words) # 詞典 #**** 去除停用詞(為了提高效率,該步驟放到統計詞頻之后) self.delStopwords(c) #**** 標題中提取特征 ********* 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中排除出現次數少于2次的詞 words_topN = list(set(words_topN)|set(words_title)) # 正文關鍵詞與標題關鍵詞取并集 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()) #***** 輸入參數為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) #***** 輸入參數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) #**** 初始化句子重要性得分,并計算句子平均長度 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) #**** 計算句子權重得分 ********** 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 = 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:# 提高首句權重 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 #**** 恢復topN句子在文中的相對順序 ********* 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): #**** 刪除不完整句子中的詳細部分 ******************** detail_tags = [',一是',':一是',',第一,',':第一,',',首先,',';首先,'] for i in keysents: for tag in detail_tags: index = i.find(tag) if index != -1: keysents[keysents.index(i)] = i[:index] #**** 刪除編號 **************************** 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) #**** 刪除備注性質的句子 ******************** for i in keysents: regex = re.compile(r'^注\d*:') result = re.findall(regex,i) if result: keysents.remove(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) #**** 刪除引號部分(如:銀行間債市小幅下跌,見下圖:) ******************** 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)
方法二:根據內容生成摘要
import pyhanlp from text import text summary = pyhanlp.HanLP.extractSummary(text, 3) print(summary)
感謝各位的閱讀!關于“python如何根據文章標題內容自動生成摘要”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。