摘要:根據(jù)算法的思路,手動(dòng)復(fù)現(xiàn)算法。根據(jù)窗口大小,組合共現(xiàn)詞和頻率,頻率代表共現(xiàn)權(quán)重。正反雙向共現(xiàn)詞。根據(jù)每個(gè)詞的權(quán)重的迭代公式,采用冒泡排序的方法,將一個(gè)詞的所有共現(xiàn)詞的權(quán)重代入公式。迭代次,使每個(gè)詞的權(quán)重收斂。根據(jù)權(quán)重排序,輸出。
根據(jù)jieba textrank算法的思路,手動(dòng)復(fù)現(xiàn)textrank算法。
思路:1.分詞,確定窗口大小。2.根據(jù)窗口大小,組合共現(xiàn)詞和頻率,頻率代表共現(xiàn)權(quán)重。 trick:正反雙向共現(xiàn)詞。 3.根據(jù)textrank 每個(gè)詞的權(quán)重的迭代公式,采用冒泡排序的方法,將一個(gè)詞的所有共現(xiàn)詞的權(quán)重代入公式。 4.迭代10次,使每個(gè)詞的權(quán)重收斂。 5.根據(jù)權(quán)重排序,輸出top words。
import collections
import sys
import jieba
import jieba.posseg as psg
from operator import itemgetter
class UndirectWeightedGraph:
d=0.85
def __init__(self):
self.edges=collections.defaultdict(list)
def add_edge(self,start,end,weight):
self.edges[start].append((start,end,weight))
self.edges[end].append((end,start,weight))
def rank(self):
ws=collections.defaultdict(float)
outSum=collections.defaultdict(float)
wsdef=1.0/(len(self.edges) or 1.0)
for n,elem in self.edges.items():
outSum[n]=sum([e[2] for e in elem])
ws[n]=wsdef
for epoch in range(10):
for n,elems in self.edges.items():
s=0
for elem in elems:
s+=elem[2]/outSum[elem[1]]*ws[elem[1]]
ws[n]=s
min_rank,max_rank=sys.float_info[0],sys.float_info[3]
for n,w in ws.items():
if wmax_rank:
max_rank=w
for n,w in ws.items():
ws[n]=((n-min_rank)/10.0)/((max_rank-min_rank)/10.0)
return ws
class TextRank(object):
def __init__(self):
self.stopwords=[]
self.pos_filter=[]
self.span=5
def pairfilter(self,wp):
return wp.flag in self.pos_filter and len(wp.word)>=2 and wp.word.lower not in self.stopwords
def textrank(self,sentence,topk=20):
uwg=UndirectWeightedGraph()
words=psg.lcut(sentence)
wm=collections.defaultdict(int)
for word_index,wp in enumerate(words):
if self.pairfilter(wp):
for index_assit in range(word_index+1,word_index+5):
if index_assit>=len(words):
break
if not self.pairfilter(words[index_assit]):
continue
wm[(wp,words[index_assit])]+=1
# uwg.add_edge(wp.word,words[index_assit].word,1)
for words_tuple,w in wm.items():
uwg.add_edge(words_tuple[0],words_tuple[1],w)
g=uwg.rank()
g=sorted(g.items(),key=itemgetter(1),reverse=True)
return g[:topk]
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.hztianpu.com/yun/41618.html
摘要:軟件實(shí)現(xiàn)的是偽隨機(jī)數(shù)。有限狀態(tài)機(jī)不能產(chǎn)生真正的隨機(jī)數(shù)的。復(fù)聯(lián)中,滅霸打了指響之后,復(fù)仇者聯(lián)盟中存活和死亡的名單其實(shí)并不是隨機(jī)的。可見,滅霸的指響抹除過程并不是隨機(jī)的。綜上,滅霸的指響抹除過程不符合隨機(jī)性不可預(yù)測性以及不可復(fù)現(xiàn)性。showImg(https://user-gold-cdn.xitu.io/2019/5/7/16a91fc63239db4d);周末,陪女朋友去電影院看了《復(fù)仇者聯(lián)...
摘要:機(jī)器學(xué)習(xí)作為時(shí)下最為火熱的技術(shù)之一受到了廣泛的關(guān)注。文中給出的個(gè)建議都是針對機(jī)器學(xué)習(xí)系統(tǒng)的,沒有包含通用軟件工程里那些單元測試,發(fā)布流程等內(nèi)容,在實(shí)踐中這些傳統(tǒng)最佳實(shí)踐也同樣非常重要。 圖片描述 「觀遠(yuǎn)AI實(shí)戰(zhàn)」欄目文章由觀遠(yuǎn)數(shù)據(jù)算法天團(tuán)傾力打造,觀小編整理編輯。這里將不定期推送關(guān)于機(jī)器學(xué)習(xí),數(shù)據(jù)挖掘,特征重要性等干貨分享。本文8千多字,約需要16分鐘閱讀時(shí)間。 機(jī)器學(xué)習(xí)作為時(shí)下最為火...
摘要:此次破解的背景是一個(gè)朋友希望定期同步某個(gè)公司的工商信息,評估和測試了下。相對比較可能的就是啟寶的接口了。本地實(shí)現(xiàn)小結(jié)這次的破解啟寶,是一次難得的經(jīng)驗(yàn)積累。從全網(wǎng)其他的破解方法,以及自己如何一步一步調(diào)試,最終破解出生成算法。這只是一次記錄。 此次破解的背景是:一個(gè)朋友希望定期同步某個(gè)公司的工商信息,評估和測試了下。相對比較可能的就是啟*寶的接口了。通過一天的努力,終于有了點(diǎn)底了。特做記錄...
閱讀 808·2021-11-17 09:33
閱讀 3856·2021-09-01 10:46
閱讀 1851·2019-08-30 11:02
閱讀 3357·2019-08-29 15:05
閱讀 1456·2019-08-26 11:39
閱讀 2361·2019-08-23 17:04
閱讀 2035·2019-08-23 15:43
閱讀 1427·2019-08-23 14:12