python摘要
❶ python有哪些提取文本摘要的庫
TextTeaser好像很贊
可是試試 snownlp
google goose也可以
❷ python有哪些提取文本摘要的庫
google goose
pythonSnowNLP
pythonTextTeaser
pythonsumy
❸ python有哪些提取文本摘要的庫
1.google goose
>>>fromgooseimportGoose
>>>url='http://edition.cnn.com/2012/02/22/world/europe/uk-occupy-london/index.html?hpt=ieu_c2'
>>>g=Goose()
>>>article=g.extract(url=url)
>>>article.title
u''
>>>article.meta_description
".Paul'yinadecisionmadebyLondon'sCourtofAppeal."
>>>article.cleaned_text[:150]
(CNN)--.Paul'
>>>article.top_image.src
http://i2.cdn.turner.com/cnn/dam/assets/111017024308-occupy-london-st-paul-s-cathedral-story-top.jpg
2. pythonSnowNLP
fromsnownlpimportSnowNLP
s=SnowNLP(u'這個東西真心很贊')
s.words#[u'這個',u'東西',u'真心',
#u'很',u'贊']
s.tags#[(u'這個',u'r'),(u'東西',u'n'),
#(u'真心',u'd'),(u'很',u'd'),
#(u'贊',u'Vg')]
s.sentiments#0.9769663402895832positive的概率
s.pinyin#[u'zhe',u'ge',u'dong',u'xi',
#u'zhen',u'xin',u'hen',u'zan']
s=SnowNLP(u'「繁體字」「繁體中文」的叫法在台灣亦很常見。')
s.han#u'「繁體字」「繁體中文」的叫法
#在台灣亦很常見。'
text=u'''
自然語言處理是計算機科學領域與人工智慧領域中的一個重要方向。
它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。
自然語言處理是一門融語言學、計算機科學、數學於一體的科學。
因此,這一領域的研究將涉及自然語言,即人們日常使用的語言,
所以它與語言學的研究有著密切的聯系,但又有重要的區別。
自然語言處理並不是一般地研究自然語言,
而在於研製能有效地實現自然語言通信的計算機系統,
特別是其中的軟體系統。因而它是計算機科學的一部分。
'''
s=SnowNLP(text)
s.keywords(3)#[u'語言',u'自然',u'計算機']
s.summary(3)#[u'因而它是計算機科學的一部分',
#u'自然語言處理是一門融語言學、計算機科學、
#數學於一體的科學',
#u'自然語言處理是計算機科學領域與人工智慧
#領域中的一個重要方向']
s.sentences
s=SnowNLP([[u'這篇',u'文章'],
[u'那篇',u'論文'],
[u'這個']])
s.tf
s.idf
s.sim([u'文章'])#[0.3756070762985226,0,0]
3. pythonTextTeaser
#!/usr/bin/python
#-*-coding:utf-8-*-
#articlesource:https://blogs.dropbox.com/developers/2015/03/limitations-of-the-get-method-in-http/
title=""
text=",.Inthehopesthatithelpsothers,.Inthispost,we』ourownAPI.Asarule,..Forexample,abrowserdoesn』,,thebrowserknowsit』』sanetworkerror.ForformsthatuseHTTPPOST,.HTTP-』tmodifyserverstate.,theapp』.Thelibrarydoesn』.』tmodifyserverstate,butunfortunatelythisisn』talwayspossible.GETrequestsdon』thavearequestbody,.WhiletheHTTPstandarddoesn』,.Thisisrarelyaproblem,/deltaAPIcall.Thoughitdoesn』tmodifyserverstate,.Theproblemisthat,inHTTP,estbody.Wecouldhavesomehowcontorted/,,likeperformance,simplicity,anddeveloperergonomics.Intheend,wedecidedthebenefitsofmaking/deltamoreHTTP-likeweren』.case,soit』snosurprisethatitdoesn』tfiteveryAPIperfectly.Maybeweshouldn』tletHTTP』.Forexample,independentofHTTP,.Then,』tmodifyserverstateanddon』thavelargeparameters,.Thisway,we』."
tt=TextTeaser()
sentences=tt.summarize(title,text)
forsentenceinsentences:
printsentence
4. pythonsumy
#-*-coding:utf8-*-
from__future__importabsolute_import
from__future__importdivision,print_function,unicode_literals
fromsumy.parsers.htmlimportHtmlParser
fromsumy.parsers.
fromsumy.nlp.tokenizersimportTokenizer
fromsumy.summarizers.
fromsumy.nlp.stemmersimportStemmer
fromsumy.utilsimportget_stop_words
LANGUAGE="czech"
SENTENCES_COUNT=10
if__name__=="__main__":
url="http://www.zsstritezuct.estranky.cz/clanky/predmety/cteni/jak-naucit-dite-spravne-cist.html"
parser=HtmlParser.from_url(url,Tokenizer(LANGUAGE))
#orforplaintextfiles
#parser=PlaintextParser.from_file("document.txt",Tokenizer(LANGUAGE))
stemmer=Stemmer(LANGUAGE)
summarizer=Summarizer(stemmer)
summarizer.stop_words=get_stop_words(LANGUAGE)
forsentenceinsummarizer(parser.document,SENTENCES_COUNT):
print(sentence)
❹ python中如何分析這是一本關於什麼的文檔
最基本的就是做分詞後取最高頻詞。
作為優化,可以從詞性角度排除一些高頻詞,如高頻詞「的」之類的。
如果還想進一步優化,就需要使用大數據了,建立一個詞相關性評分表,對文檔分詞後的詞頻與這相應的相關度做加權,選取加權最高的一組詞或幾組詞為文檔的索引詞表。
然後從文檔中提取整句與提取的索引詞表履蓋度最高的若干句作為文檔的摘要。
大部分的摘要演算法就是按這個思路來完成的。
❺ python有哪些提取文本摘要的庫
miso-belica/sumy,而且在介紹頁面裡面還有一些其他的系統
Document Summarization using TextRank : blog : Josh Bohde 介紹了用Python實現TextRank演算法的步驟
TextTeaser好像很贊
❻ 百度AI新聞摘要python可以怎麼寫
完整代碼
importnumpyasnp
importspacy
fromspacy.lang.en.stop_wordsimportSTOP_WORDS
nlp=spacy.load('en_core_web_sm')
classTextRank4Keyword():
"""Extractkeywordsfromtext"""
def__init__(self):
self.d=0.85#dampingcoefficient,usuallyis.85
self.min_diff=1e-5#convergencethreshold
self.steps=10#iterationsteps
self.node_weight=None#savekeywordsanditsweight
defset_stopwords(self,stopwords):
"""Setstopwords"""
forwordinSTOP_WORDS.union(set(stopwords)):
lexeme=nlp.vocab[word]
lexeme.is_stop=True
defsentence_segment(self,doc,candidate_pos,lower):
"""Storethosewordsonlyincadidate_pos"""
sentences=[]
forsentindoc.sents:
selected_words=[]
fortokeninsent:
#
iftoken.pos_incandidate_posandtoken.is_stopisFalse:
iflowerisTrue:
selected_words.append(token.text.lower())
else:
selected_words.append(token.text)
sentences.append(selected_words)
returnsentences
defget_vocab(self,sentences):
"""Getalltokens"""
vocab=OrderedDict()
i=0
forsentenceinsentences:
forwordinsentence:
ifwordnotinvocab:
vocab[word]=i
i+=1
returnvocab
defget_token_pairs(self,window_size,sentences):
"""Buildtoken_pairsfromwindowsinsentences"""
token_pairs=list()
forsentenceinsentences:
fori,wordinenumerate(sentence):
forjinrange(i+1,i+window_size):
ifj>=len(sentence):
break
pair=(word,sentence[j])
ifpairnotintoken_pairs:
token_pairs.append(pair)
returntoken_pairs
defsymmetrize(self,a):
returna+a.T-np.diag(a.diagonal())
defget_matrix(self,vocab,token_pairs):
"""Getnormalizedmatrix"""
#Buildmatrix
vocab_size=len(vocab)
g=np.zeros((vocab_size,vocab_size),dtype='float')
forword1,word2intoken_pairs:
i,j=vocab[word1],vocab[word2]
g[i][j]=1
#GetSymmericmatrix
g=self.symmetrize(g)
#Normalizematrixbycolumn
norm=np.sum(g,axis=0)
g_norm=np.divide(g,norm,where=norm!=0)#thisisignorethe0elementinnorm
returng_norm
defget_keywords(self,number=10):
"""Printtopnumberkeywords"""
node_weight=OrderedDict(sorted(self.node_weight.items(),key=lambdat:t[1],reverse=True))
fori,(key,value)inenumerate(node_weight.items()):
print(key+'-'+str(value))
ifi>number:
break
defanalyze(self,text,
candidate_pos=['NOUN','PROPN'],
window_size=4,lower=False,stopwords=list()):
"""Mainfunctiontoanalyzetext"""
#Setstopwords
self.set_stopwords(stopwords)
#ParetextbyspaCy
doc=nlp(text)
#Filtersentences
sentences=self.sentence_segment(doc,candidate_pos,lower)#listoflistofwords
#Buildvocabulary
vocab=self.get_vocab(sentences)
#Gettoken_pairsfromwindows
token_pairs=self.get_token_pairs(window_size,sentences)
#Getnormalizedmatrix
g=self.get_matrix(vocab,token_pairs)
#Initionlizationforweight(pagerankvalue)
pr=np.array([1]*len(vocab))
#Iteration
previous_pr=0
forepochinrange(self.steps):
pr=(1-self.d)+self.d*np.dot(g,pr)
ifabs(previous_pr-sum(pr))<self.min_diff:
break
else:
previous_pr=sum(pr)
#Getweightforeachnode
node_weight=dict()
forword,indexinvocab.items():
node_weight[word]=pr[index]
self.node_weight=node_weight
❼ python有哪些提取文本摘要的庫
其實實現是個簡單版本並不難,文本切成句子,以句子相似性作為相互鏈接的權值,構造一個矩陣。有了權值矩陣就可以利用pagerank來得到每個句子的最
終得分。計算好沒個句子的出度入度,給個初始的得分,迭代更新至收斂,得分最高則作為摘要。計算句子相似性有很多辦法,切詞算集合距
離,sentence2vec
算歐式距離等等,切詞集合距離的辦法比較糙,效果一般,還是考慮了語意相似會好一些。這種辦法一般在比較規矩的文檔,如新聞,效果還可以。
❽ python有哪些提取文本摘要的庫
因為你的html不是合法的xml格式,標簽沒有成對出現,只能用html解析器
1
2
3
4
5
6
7
8
from bs4 import BeautifulSoup
s = """
</span><span style= '<a href="https://www..com/s?wd=font-size&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">font-size</a>:12.0pt;color:#CC3399'>714659079qqcom 2014/09/10 10:14</span></p></div>
"""
soup = BeautifulSoup(s, "html.parser")
print soup
print soup.get_text()
如果你想用正則的話,只要把標簽匹配掉就可以了
1
2
3
4
5
6
7
8
import re
s = """
</span><span style= '<a href="https://www..com/s?wd=font-size&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">font-size</a>:12.0pt;color:#CC3399'>714659079qqcom 2014/09/10 10:14</span></p></div>
"""
dr = re.compile(r'<[^>]+>', re.S)
dd = dr.sub('', s)
print dd
如果解決了您的問題請採納!
如果未解決請繼續追問
❾ 如何用Python玩轉TF-IDF之尋找相似文章並生成摘要
應用1:關鍵詞自動生成
核心思想是對於某個文檔中的某個詞,計算其在這個文檔中的標准化TF值,然後計算這個詞在整個語料庫中的標准化IDF值。在這里,標准化是說對原始的計算公式進行了一些變換以取得更好的衡量效果,並避免某些極端情況的出現。這個詞的TF-IDF值便等於TF*IDF。對於這個文檔中的所有詞計算它們的TF-IDF值,並按照由高到低的順序進行排序,由此我們便可以提取我們想要的數量的關鍵詞。
TF-IDF的優點是快捷迅速,結果相對來說比較符合實際情況。缺點是當一篇文檔中的兩個詞的IDF值相同的時候,出現次數少的那個詞有可能更為重要。再者,TF-IDF演算法無法體現我詞的位置信息,出現位置靠前的詞與出現位置靠後的詞,都被視為重要性相同,這是不正確的。存在的解決辦法是對文章的第一段和每段的第一句話給予比較大的權重。
應用2:計算文本相似度
明白了對於每個詞,如何計算它的TF-IDF值。那麼計算文本相似度也輕而易舉。我們已經計算了文章中每個詞的TF-IDF值,那麼我們便可以將文章表徵為詞的TF-IDF數值向量。要計算兩個文本的相似度,只需要計算餘弦即可,餘弦值越大,兩個文本便越相似。
應用3:自動摘要
2007年,美國學者的論文<A Survey on Automatic Text Summarization>總結了目前的自動摘要演算法,其中很重要的一種就是詞頻統計。這種方法最早出自1958年IBM公司一位科學家的論文<The Automatic Creation of Literature Abstracts>。這位科學家認為,文章的信息都包含在句子中,有的句子包含的信息多,有的句子包含的信息少。自動摘要就是找出那些包含信息最多的句子。那麼句子的信息量怎麼衡量呢?論文中採用了關鍵詞來衡量。如果包含的關鍵詞越多,就說明這個句子越重要,這位科學家提出用Cluster的來表示關鍵詞的聚集。所謂簇,就是包含多個關鍵詞的句子片段。
以第一個圖為例,其中的cluster一共有7個詞,其中4個是關鍵詞。因此它的重要性分值就等於(4*4)/7=2.3。然後,找出包含cluster重要性分值最高的句子(比如5句),把它們合在一起,就構成了這篇文章的自動摘要。具體實現可以參見<Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites>(O'Reilly, 2011)一書的第8章,Python代碼見github。這種演算法後來被簡化,不再區分cluster,只考慮句子包含的關鍵詞。偽代碼如下。
Summarizer(originalText,maxSummarySize):
//計算文本的詞頻,生成一個列表,比如[(10,'the'),(3,'language'),(8,'code')...]
wordFrequences=getWordCounts(originalText)
//過濾掉停用詞,列表變成[(3,'language'),(8,'code')...]
contentWordFrequences=filtStopWords(wordFrequences)
//按照詞頻的大小進行排序,形成的列表為['code','language'...]
contentWordsSortbyFreq=sortByFreqThenDropFreq(contentWordFrequences)
//將文章分成句子
sentences=getSentences(originalText)
//選擇關鍵詞首先出現的句子
setSummarySentences={}
:
firstMatchingSentence=search(sentences,word)
setSummarySentences.add(firstMatchingSentence)
ifsetSummarySentences.size()=maxSummarySize:
break
//將選中的句子按照出現順序,組成摘要
summary=""
foreachsentenceinsentences:
:
summary=summary+""+sentence
returnsummary
類似的演算法已經被寫成了工具,比如基於Java的Classifier4J庫的SimpleSummariser模塊、基於C語言的OTS庫、以及基於classifier4J的C#實現和python實現。
❿ python有哪些提取文本摘要的庫
可以和其他語言交互的,所以你只要隨便找個庫就行。
說一個我自己做的:其實實現是個簡單版本並不難,文本切成句子,以句子相似性作為相互鏈接的權值,構造一個矩陣。有了權值矩陣就可以利用pagerank來得到每個句子的最終得分。計算好沒個句子的出度入度,給個初始的得分,迭代更新至收斂,得分最高則作為摘要。
計算句子相似性有很多辦法,切詞算集合距離,sentence2vec 算歐式距離等等,切詞集合距離的辦法比較糙,效果一般,還是考慮了語意相似會好一些。這種辦法一般在比較規矩的文檔,如新聞,效果還可以。