博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
textrank-jieba 算法复现
阅读量:7190 次
发布时间:2019-06-29

本文共 2304 字,大约阅读时间需要 7 分钟。

根据jieba textrank算法的思路,手动复现textrank算法。

思路:1.分词,确定窗口大小。

2.根据窗口大小,组合共现词和频率,频率代表共现权重。      trick:正反双向共现词。 3.根据textrank 每个词的权重的迭代公式,采用冒泡排序的方法,将一个词的所有共现词的权重代入公式。 4.迭代10次,使每个词的权重收敛。 5.根据权重排序,输出top words。
import collectionsimport sysimport jiebaimport jieba.posseg as psgfrom operator import itemgetterclass 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 w
max_rank: max_rank=w for n,w in ws.items(): ws[n]=((n-min_rank)/10.0)/((max_rank-min_rank)/10.0) return wsclass 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]

转载地址:http://czxkm.baihongyu.com/

你可能感兴趣的文章
matlab从fig文件中提取数据
查看>>
mysql show profiles 使用分析sql 性能
查看>>
POJ 2488 A Knight's Journey (DFS)
查看>>
jvm内存
查看>>
silverlight在XAML资源中实例化CLR对象
查看>>
Java中的字符串不变性
查看>>
Sql 的 RAISERROR用法
查看>>
Css下拉菜单设置
查看>>
Robot Framework学习笔记(八)------ride标签使用
查看>>
BIOS与EC之间关系
查看>>
一款简洁而强大的前端框架—JQuery
查看>>
js中的解绑事件
查看>>
ubuntu16.04下编译安装vim8.1
查看>>
DSSM 深度学习解决 NLP 问题:语义相似度计算
查看>>
真实世界的脉络].(英)戴维.多伊奇.pdf
查看>>
POJ 3710 Christmas Game
查看>>
秒懂神经网络---真·模拟退火算法
查看>>
js进阶 10-9 -of-type型子元素伪类选择器
查看>>
html5--6-14 CSS3中的颜色表示方式
查看>>
thinkphp5空控制器和空操作
查看>>