TextRank算法实践

PageRank算法思想

TextRank算法的思想主要源于PageRank算法,PageRank算法主要用于给互联网网页排序,根据网页之间的跳转来构造一个初始权重矩阵(转移矩阵),默认每个网页质量都是1

使用一个向量v,其表示点击每个网页的概率(初始时都是等概率),然后按照图中所示反复相乘,直到结果不变,就得到了每个网页的权重排序。

另外还要考虑到一些网页没有指向其他网页的情况,其实都会有相应的解决办法,但是因为这个算法比较老了,不再细讲。

TextRank是如何基于PageRank进行的操作的

也就是利用句子代替网页,通过计算句子间的相似度得到相似度矩阵,然后对这个相似度矩阵做pagerank算法。

TextRank处理流程

主要任务:将多个句子作为输入,并生成一个要点式的摘要。

  1. 如果针对多篇文章,就先需要把所有文章中的文本连接起来;
  2. 把文本分割成一个个的句子,在分割之前进行文本标准化;
  3. 对每个句子做向量化,因为要借助词向量来生成句子向量,所以需要对句子先做分词;
  4. 计算句子之间的相似度,并存储到矩阵中;
  5. 把相似度矩阵转化为图,其中句子是节点,相似度是节点间的权重;
  6. 取到top-k权重的句子,作为最终的摘要。

第1步根据自己的任务情况自行操作,这里直接从第2步开始

# 标准化文本
def as_text(v):if v is None:return Noneelif isinstance(v, bytes):return v.decode('utf-8', errors='ignore')elif isinstance(v, str):return velse:raise ValueError(f'Unknown type{type(v)}')text_type = str
string_types = (str,)
xrange = range# 判断是否为文本类型
def is_text(v):return isinstance(v, text_type)# "句子分割"
class SentenceSegmentation:def __init__(self, delimiters=('?', '!', ';', '?', '!', ';', '。', '……', '…', '\n')):""":param delimiters: 一些基本的句子分割符号"""self.delimiters = set(as_text(item) for item in delimiters)def segment(self, text):res = [as_text(text)]for sep in self.delimiters:text, res = res, []for seq in text:res += seq.split(sep)res = [s.strip() for s in res if len(s.strip()) > 0]return res

步骤3.1分词

# 默认的停用词文件路径
def get_default_stop_words_file():d = os.path.dirname(os.path.realpath('text-rank'))return os.path.join(d, 'stopwords.txt')class WordSegmentation:def __init__(self, stop_words_file=None,allow_speech_tags=('an', 'i', 'j', 'l', 'n', 'nr', 'nrfg', 'ns', 'nt', 'nz', 't', 'v', 'vd', 'vn', 'eng')):""":param stop_words_file: 保存停止词的文件路径,utf编码,每行一个停止词,若不是str类型,则使用默认的停止词:param allow_speech_tags: 词性列表,用于过滤"""allow_speech_tags = [as_text(item) for item in allow_speech_tags]self.default_speech_tag_filter = allow_speech_tagsself.stop_words = set()self.stop_words_file = get_default_stop_words_file()if type(stop_words_file) is str:self.stop_words_file = stop_words_filefor word in codecs.open(self.stop_words_file, 'r', 'utf-8', 'ignore'):self.stop_words.add(word.strip())def segment(self, text, lower=True, use_stop_words=True, use_speech_tags_filter=False):"""对一段文本进行分词,返回list类型的分词结果:param text::param lower: 是否将单词小写(针对英文):param use_stop_words: 若为True,则利用停止词集合来过滤(去掉关键词):param use_speech_tags_filter: 是否基于词性进行过滤,若为True,则使用self.default_speech_tag_filter过滤,否则不过滤:return:"""text = as_text(text)jieba_result = pseg.cut(text)if use_speech_tags_filter:jieba_result = [w for w in jieba_result if w.flag in self.default_speech_tag_filter]else:jieba_result = [w for w in jieba_result]# 去掉特殊符号word_list = [w.word.strip() for w in jieba_result if w.flag != 'x']word_list = [word for word in word_list if len(word)>0]if lower:word_list = [word.lower() for word in word_list]if use_stop_words:word_list = [word.strip() for word in word_list if word.strip() not in self.stop_words]return word_listdef segment_sentence(self, sequences, lower=True, use_stop_words=True, use_speech_tags_filter=False):"""将列表sequences中的每个元素/句子转换为由单词构成的列表sequences -- 列表,每个元素是一个句子(字符串类型)"""res = []for sentence in sequences:res.append(self.segment(text=sentence, lower=lower, use_stop_words=use_stop_words,use_speech_tags_filter=use_speech_tags_filter))return res

结巴分词的词性对照表

// jieba词性对照表
- a 形容词  - ad 副形词  - ag 形容词性语素  - an 名形词
- b 区别词
- c 连词
- d 副词  - df   - dg 副语素
- e 叹词
- f 方位词
- g 语素
- h 前接成分
- i 成语
- j 简称略称
- k 后接成分
- l 习用语
- m 数词  - mg - mq 数量词
- n 名词  - ng 名词性语素  - nr 人名  - nrfg    - nrt  - ns 地名  - nt 机构团体名  - nz 其他专名
- o 拟声词
- p 介词
- q 量词
- r 代词  - rg 代词性语素  - rr 人称代词  - rz 指示代词
- s 处所词
- t 时间词  - tg 时语素
- u 助词  - ud 结构助词 得- ug 时态助词- uj 结构助词 的- ul 时态助词 了- uv 结构助词 地- uz 时态助词 着
- v 动词  - vd 副动词- vg 动词性语素  - vi 不及物动词  - vn 名动词  - vq
- x 非语素词
- y 语气词
- z 状态词  - zg 

根据词性对照表,可以分析得到这里(‘an’, ‘i’, ‘j’, ‘l’, ‘n’, ‘nr’, ‘nrfg’, ‘ns’, ‘nt’, ‘nz’, ‘t’, ‘v’, ‘vd’, ‘vn’, ‘eng’)对应的词性分别为:名行词,成语,简称略称,习用语,名词,人名,地名,机构团体名,其他专名,时间词,动词,副动词,名动词,英文;这里利用参数use_speech_tags_filter来判断是否根据词性进行过滤,如果进行过滤,则只要上述这些词性的词,其他的词会被丢弃。

结巴分词的结果,遍历每个元素,通过word属性可以得到分词结果,通过flag属性可以得到词性,x表示非语素词,一般为标点符号,所以可以过滤掉。

步骤3.2 获取词向量

下载Glove中文词向量 参考资料:https://github.com/Embedding/Chinese-Word-Vectors

def get_word_vector():word_embedding = {}f = open('sgns.wiki.word', encoding='utf-8')for line in f:values = line.split()  # 以空格做分割word = values[0]coefs = np.asarray(values[1:], dtype='float32')word_embedding[word] = coefsf.close()print(f'词向量长度:{len(word_embedding)}')return word_embedding

词向量长度:352163

word_embedding元素内容示例:

{'的': [-0.251355  0.234742 -0.169728  0.026955  0.25885   0.028063 -0.498176,  0.076507  0.151926  0.214029  0.063718 -0.041315  0.509875  0.358331, -0.151229  0.271991 -0.119206 -0.269604  0.2963    0.312931 -0.066358,  0.013657 -0.021935  0.264219  0.048273 -0.212434 -0.064783 -0.243087,  0.166897 -0.039173  0.017801 -0.204246 -0.252223  0.038224  0.233915,  0.094598 -0.024282  0.029599 -0.238779  0.008268 -0.348425 -0.357207, -0.187001 -0.085915  0.094435 -0.196423 -0.098985 -0.023036 -0.048889, -0.121236 -0.061561  0.053498  0.170762 -0.07916  -0.297504 -0.092928, -0.06956  -0.194255 -0.090922  0.148681  0.042842 -0.143766  0.104044, -0.164521 -0.292341  0.28678   0.182208 -0.329816  0.29451  -0.231588,  0.298016 -0.394329  0.100928  0.131523 -0.068831 -0.150447 -0.241897,  0.092547  0.102829  0.007546 -0.108389 -0.070817 -0.081737 -0.027211,  0.129244 -0.093027 -0.295611 -0.236846 -0.05789  -0.066839  0.011099,  0.00524   0.137162 -0.068874 -0.115253 -0.341677  0.285972 -0.01384,  0.070...}

步骤3.3 计算句子向量以及步骤4、5、6,均在main函数中

def main(text):ss = SentenceSegmentation()sentences = ss.segment(text)ws = WordSegmentation()words = ws.segment_sentence(sentences)word_embeddings = get_word_vector()sentence_vectors = []for i in words:if len(i) != 0:# 这里每个句子的向量值就是其所有词向量的和的平均值v = sum([word_embeddings.get(w, np.zeros((300,))) for w in i])/(len(i)+0.001)else:v = np.zeros((300,))sentence_vectors.append(v)print(len(sentence_vectors))# 相似度矩阵sim_mat = np.zeros([len(sentences), len(sentences)])print(sim_mat.shape)for i in range(len(sentences)):for j in range(len(sentences)):if i != j:# 计算两两句子间的相似度sim_mat[i][i] = cosine_similarity(sentence_vectors[i].reshape(1, 300),sentence_vectors[j].reshape(1, 300))[0, 0]print(sim_mat.shape)# 使用page rank算法# 生成图nx_graph = nx.from_numpy_array(sim_mat)# 计算得到每个句子的得分scores = nx.pagerank(nx_graph)print(scores)ranked_sentences = sorted(((scores[i], s) for i, s in enumerate(sentences)), reverse=True)sn = 5for i in range(sn):print(ranked_sentences[i][1])

调用nx.pagerank算法可能会出现”AttributeError: module ‘scipy.sparse’ has no attribute ‘coo_array’“的问题

解决办法:将scipy版本更为1.8.0的版本。

测试:

if __name__ == "__main__":article = """红星新闻记者 陈卿媛 罗梦婕 实习生 张洁 张昱时 何沛璘编辑 于曼歌线上教育公司北京开课吧科技有限公司(以下简称“开课吧”)近日负面消息不断。6月底,“开课吧”就被爆拖欠员工工资、不缴社保。近日,“开课吧”还陷入直播课断更、学员学费不按约定退款的舆论风波。每月完成6成的听课率,每月就能收到六分之一的退款;若考证学院未获得证书,还能得到一定的“激励金”……这些宣传吸引了不少学员在“开课吧”开课。然而,不少学员表示,并没有收到承诺发放的退款或“激励金”,一直被拖欠承诺退还的学费。甚至部分学员支付课程学费后近5个月未开课,退费也没有收到。此前,“开课吧”创始人、CEO方业昌曾就拖欠员工工资、不缴社保等事,发布全员公开信。信中提到他个人负债10多个亿,正在通过各种办法积极拯救公司业务,未来3个月不敢保证留下来的同事薪水都足额准时发放。据媒体报道,关于学院退费难的问题,“开课吧”给出的回应是“公司在转型,最快8月份会开始退款。”01“开课吧”困境曾被市场监管局多次点名关联多起教育培训合同纠纷案“开课吧”公司官网显示,该公司面向大学生和在职人员提供职业资格考试、专业能力进阶、新职业与副业技能多元化职业教育及人才服务。天眼查显示,公司成立于2012年7月,法定代表人方业昌,注册资本约108万元。“开课吧”于2020年8月26日正式宣布从慧科集团拆分,并独立获得A轮融资5.5亿元人民币。2021年7月11日再次宣布完成6亿元B1轮融资。2021年7月24日,“双减”政策落地,学科类教培机构大规模萎缩。而“开课吧”面向的主要是成人的职业教育,曾一度被资本看好。“开课吧”团队还扩大了3倍,最高达6000名员工的规模。不过,获得6亿融资不到一年,“开课吧”就深陷拖欠员工工资和学员返款的双重困境之中。2021年,北京市海淀市市场监督管理局点名的教育培训机构名单中,“开课吧”多次出现,原因是“投诉数量大、解决率低”。今年7月23日,记者在黑猫投诉平台以“开课吧”为关键词搜索,共有近1万条投诉量,其中8428条已回复,不少指出“开课吧”涉嫌虚假宣传,诱导贷款,存在欺骗等问题。部分投诉内容表示,课前宣传时,某位老师直播课程并陪跑,实际上是录播课程,“开课吧”针对一些课程承诺按合同约定完成内容便可返还学费,但实际并未履行。天眼查显示,“开课吧”风险信息相关内容中,其关联多个服务合同纠纷、教育培训合同纠纷案件,曾因劳动争议被起诉,还涉及多个案件将要开庭。今年3月,该公司被一家公司申请财产保全,法院裁定冻结该公司存款241万余元;今年4月,该公司及其股东慧科教育被乐推另一家公司申请财产保全,法院裁定冻结两公司银行存款近8528万元。“开课吧”官网显示,网站除7月发布的防止学员受骗的公开声明之外,公开课课程等信息都停留在了6月。02学员称被“套路”因1元体验课缴费2万多元听课返费只收到一次 最后直播课也断了“开课吧”学员苏小姐向红星新闻记者详细讲述了通过1元课程,她被“套路”上万元的经过。据了解,苏小姐于今年1月份在抖音平台看到“开课吧”的教学广告,并付费1元钱试听了相关课程。“开课吧”广告宣传页面显示,该课程的福利是“服务期内每月出勤(直播+录播)达到本月的课程内容总时长的60%及以上,发放实缴费用金额的六分之一;考不过全退。”苏小姐试听后觉得不错,想购买“开课吧”针对研究生考试设置的一项课程。但即便有相关的退费政策,两万多的培训费还是让她有一些犹豫。她表示,“开课吧”设置了两种培训费模式:一种是19800元不退款模式,一种是25800元有退款的模式。苏小姐犹豫了几天,突然看到25800元降价3000元,就报名了有退费的模式。她以为,每个月都能得到退还的六分之一的培训费。1月27日,苏小姐与“开课吧”签订合同并支付全部培训费。2月27日,是约定的发放奖励金的日期,她3月11日才收到。苏小姐没有想到的是,这是她唯一一次收到退款。5月5日,“开课吧”的一名导师联系上苏小姐,以每月返款消耗人力物力为由,给月返班的学生提供如下选择:第一种是暂不月返,于2022年8月底“开课吧”九周年的周年庆时一次性打款,再赠送学员价值2000元的苹果公司产品。第二种是按照原约定每月返款。苏小姐选择了第一种模式,在审核通过后,“开课吧”承诺一直未兑现。然而,5月开始,苏小姐购买的课程也开始出现问题。“从5月16日起,我的直播课就断了。之后的每一周都安排我们复习,连课表都没有了。”苏小姐说,她现在希望要么把课上完,要么退款。另外一名学员小魏,于2021年9月在“开课吧”的“游戏动漫大神班”课程广告中看到,可以利用空闲时间学习制作游戏动漫,课程设置了激励政策,还能提供“建模师”的岗位入职资格。小魏打算通过学习课程,以后能兼职,于是在9月7日与“开课吧”签订了合同。据小魏提供的合同显示,课程费用为10980元。小魏说,当时付款时,他担心课程费用过高,工作人员建议他分期付款,并且推荐了“芝士未来”平台付费。小魏没有听说过这个付款平台,还是选择了支付宝。根据他的培训合同,需要同时满足6项条件,并且在开课之日起15个自然月内未获得“建模师”岗位入职offer,才能申请激励金。今年5月,“开课吧”另外一名老师向小魏推荐缴费升级按月“返现班”,小魏此时通过网络察觉到“开课吧”有异常,就拒绝了。小魏说,6月份之后,大部分“开课吧”老师的企业微信直接无法显示,只有自己添加的老师私人微信还有回复。7月13日,小魏询问其中一位老师,该老师表示自己也是受害者,公司已经3个月没有发工资给员工。近日,小魏发现课程的直播和录播课均已无法打开。红星新闻记者在一份腾讯共享文档里看到,其中登记的未按期收到“开课吧”退款的学员有两千多人。不少参与“开课吧”培训课程的学员表示,并没有收到承诺发放的奖励金,一直拖欠承诺退还的学费。甚至有学员报警称,支付课程学费后近5个月未开课,退费也没有收到。停课后,苏小姐曾联系过“开课吧”的多名老师,发现老师不是表示后续工作由其他老师接替,就是直接表明已离开“开课吧”,还有人回复她“我也是受害者,我都仲裁呢。”7月22日,有多名“开课吧”维权学员向记者发来聊天截图,截图显示,“开课吧”的班主任老师向学员表示公司的现金流已经断裂,无法兑现奖学金、保障金,也无法告知可兑现日期,目前已开展“换课计划”,可以根据学费金额兑换不同数量的课程。而其中一位“考研辅导栗子老师”称,公司给出的最后方案就是两种,要么换课不退费,要么退费日期遥遥无期。03前员工称是骗局用某支付平台分期付款报名费每月返钱用来还分期 “不会返现金”一位在3月入职、7月初离开“开课吧”的前员工李老师(化名)介绍,他承担班主任业务,负责给学员介绍课程内容、“开课吧”APP使用方法和班级学费相关的内容。李老师表示,如果学员报名的不是返现班,班主任还要负责二次销售。“开课吧”要求他们在开班10天之内,催促学员交费进行“升班”为返现班。同时,班主任还要负责安抚学员。有学员在网上看到“开课吧”负面信息要退费,班主任就要安抚学员正常上课。红星新闻记者发现,许多“开课吧”学员报名返现班都使用了“芝士未来”平台绑定银行卡进行分期付款。李老师认为,在直播间宣传“免费学课程”实则为一种骗局。“你用‘芝士分期’报完这25800元的课,每个月公司会返给你4300元,用来还芝士分期。很多学员上当了就报了,报完以后,现金是不会给你返的,然后拖延一下,给你推荐一个活动、送一个平板电脑……从去年就给学员承诺过,结果到现在也没有。”红星新闻记者在相关维权帖子里看到,即使课程依旧停更,现在很多学员还要还分期款。有关课程的质量问题,李老师表示,“开课吧”的课程产品可能有上百个,市场上能见到的课程几乎都有。“‘开课吧’专门有一个部门寻找市场商机,觉得哪个课程挣钱立马就会投入,直接就开一个新部门。”李老师表示,学员报名成功后会拉所谓的“导师群”。导师群中有班主任、导师,而导师都是假的。《最强大脑》第8季选手、《奇葩说》辩手席瑞,在2021年8月入职“开课吧”,担任主讲老师。很多学员奔着席瑞购买了“开课吧”课程。“比如席瑞在公开课上承诺会一对一辅导,然后我拉的也是席瑞的微信。但是所谓的席瑞并不是真正的席瑞,他们的微信名字都是席瑞,然后进群以后随便分配一个席瑞老师,给学员答疑。”李老师介绍,这些假导师们的答疑仅限于文字形式。席瑞本人在7月中旬发微博表示,他在4月时,就发现有学员没有按时收到退费,于是第一时间停止了招生课程。早在今年3月底,他的薪资一直被拖欠,公司管理部门以改革中,需要重新调整核算等由表示进度会“慢一些”,但他一直未收到薪资,便在6月5号提出离职。据李老师介绍,目前“开课吧”全国的分部都已经关闭,“4月份时‘开课吧’的员工还有三四千人,7月5号我离开公司,也就两三百人了。”李老师说,他的工资没有照发,并且还为有些学员进行了学费垫付,截止到现在,他仍旧没有收到公司补偿的费用。根据李老师提供的截图,他表示杭州的“开课吧”分部答应给被开除的员工一定补偿,以每人补偿费4300元,分12期的形式发放。04“开课吧”CEO公开信正式进入“降本增效”新阶段负债10亿 极尽所能保证“开课吧”活着“直到6月28日,我在网上看到了‘开课吧’断交全员社保的消息。CEO方业昌29日发了公开信,我才发现‘开课吧’一直以来的财务状况,也就是说,学员、员工甚至合作方一直都处于被欺骗之中。”席瑞还在微博中提到“开课吧”CEO方业昌6月29日发的公开信。据媒体公开的信息,“开课吧”创始人、CEO方业昌发布全员公开信,对“开课吧”6月的裁员、退费风波作出说明。他表示“开课吧”过去3年的高速发展,也告一段落,正式进入“降本增效“的新阶段。之前的高速发展埋下很多隐患,更多关注在营销和增长上。3月至6月,公司进行了业务调整,达到了降本增效的明显效果。全员公开信中还提到,公司调整幅度过大过快,导致团队动荡和舆情增大引起的收入骤减和短期裁员成本骤增。而当期人工成本需要递延1-3个月才能逐渐下降(工资次月发,提成次次月发),“所以过去几个月的调整阵痛期,我们每个月的现金流缺口都在一个亿左右,这也是导致大家工资晚发和部分学员退费延期的主要原因。”方业昌称他为了解决问题,通过个人信用借款、个人投资抵押以及个人资产抵押等方式已经负债10个多亿,“极尽所能保证‘开课吧’活着,只有活着,才有能力偿还所有债务并完成使命。”他表示,“开课吧”只需要保留以教学教研、助教和班主任为主的产品和交付团队、渠道业务团队、内容运营团队和产研保障团队。“要继续最大化降低成本让公司持续运营下去,团队总规模控制在1000人以内。未来3个月,我不敢保证留下来的同事薪水都足额准时发放,但将会最大限度地保证大家基本生活。对于不适合新定位或者对公司没有信心的同事,我们也会和政府部门协商规划,将欠薪分批逐渐给大家发放。”红星新闻记者注意到,在7月5日“开课吧”官网发布的一则声明中,称“目前开课吧处于转型过渡期中,绝不存在停止经营的情况,面对学员的问题,开课吧也在积极应对并提供妥善解决方案”。红星新闻记者近日连续多次拨打“开课吧”官方客服热线,均无人接听,多名采访对象也表示多次拨打客服电话无人接听。有媒体近日就退款问题致电“开课吧”客服,客服人员称最快8月份会退费,但具体时间还不确定。05律师说法建议学员保存好合同等证据若能证明“非法占有为目的”则涉嫌诈骗生活中若遇到教育机构不按协议约定退费的情况,学员应该如何维护自身合法权益?北京市京师(深圳)律师事务所张学政律师告诉红星新闻记者,学员可以先联系教育机构进行协商,双方协议解决方法。若协商不成,可申请第三方介入。学员可请求消费者权益保护协会组织调解,还可以向相关行政部门反映和投诉。若仍未有效解决,张学政建议,学员可以直接以合同纠纷为由向当地人民法院提起诉讼。对于像“开课吧”“协议班”承诺未录取便退款的学员,如果是协议约定的退款条件已经达成,那么根据《民法典》第509条“当事人应当按照约定全面履行自己义务”的规定,培训机构应当及时履行退款义务,针对拒不退费的情形,学员也可以根据该规定提起诉讼。张律师建议,学员应注意保留纸质或电子版的课程合同、包含退费约定的协议和缴费记录凭证等证据,这是赢得民事诉讼的关键证据。此外,若发现教育培训机构宣传时夸大承诺、拉拢缴费,而后又失联跑路,完全没有履行合同的诚意和能力的情况,张学政认为,这可能涉及《刑法》第266条严厉打击的诈骗犯罪行为,学员们应当一起向培训机构所在地的公安机关报案。关于“开课吧”是否涉嫌虚假宣传,张学政律师表示,这要看“开课吧”的具体情况,如果经调查发现“开课吧”无法退费,是因为经营困难,资不抵债,则属于商业风险的范畴,退费也属于民事纠纷。但如果能够证明“开课吧”以“免费学课程”为宣传噱头,有退费能力,但实际以各种理由不履行退费承诺,则属于虚假宣传、商业欺诈,将要面临民事诉讼、行政处罚。如果能够证明培训机构以“非法占有为目的”,则涉嫌诈骗犯罪。"""main(article)

输出

词向量长度:352163
144
(144, 144)
(144, 144)
{0: 0.007288628026105042, 1: 0.007288628026105042, 2: 0.007288628026105042, 3: 0.007288628026105042, 4: 0.007288628026105042, 5: 0.007288628026105042, 6: 0.007288628026105042, 7: 0.007288628026105042, 8: 0.007288628026105042, 9: 0.007288628026105042, 10: 0.007288628026105042, 11: 0.007288628026105042, 12: 0.007288628026105042, 13: 0.0010933235562143042, 14: 0.00728862802610504, 15: 0.007288628026105042, 16: 0.007288628026105042, 17: 0.007288628026105042, 18: 0.00728862802610504, 19: 0.007288628026105042, 20: 0.007288628026105042, 21: 0.007288628026105042, 22: 0.007288628026105042, 23: 0.007288628026105042, 24: 0.007288628026105042, 25: 0.007288628026105042, 26: 0.00728862802610504, 27: 0.007288628026105042, 28: 0.007288628026105042, 29: 0.00728862802610504, 30: 0.007288628026105042, 31: 0.007288628026105042, 32: 0.007288628026105042, 33: 0.00728862802610504, 34: 0.007288628026105042, 35: 0.007288628026105042, 36: 0.007288628026105042, 37: 0.007288628026105042, 38: 0.007288628026105042, 39: 0.007288628026105042, 40: 0.007288628026105042, 41: 0.0010933235562143042, 42: 0.007288628026105042, 43: 0.007288628026105042, 44: 0.007288628026105042, 45: 0.007288628026105042, 46: 0.007288628026105042, 47: 0.007288628026105042, 48: 0.007288628026105042, 49: 0.007288628026105042, 50: 0.007288628026105042, 51: 0.00728862802610504, 52: 0.007288628026105042, 53: 0.007288628026105042, 54: 0.007288628026105042, 55: 0.007288628026105042, 56: 0.007288628026105042, 57: 0.007288628026105042, 58: 0.007288628026105042, 59: 0.007288628026105042, 60: 0.007288628026105042, 61: 0.007288628026105042, 62: 0.007288628026105042, 63: 0.007288628026105042, 64: 0.007288628026105042, 65: 0.007288628026105042, 66: 0.007288628026105042, 67: 0.007288628026105042, 68: 0.007288628026105042, 69: 0.007288628026105042, 70: 0.007288628026105042, 71: 0.0010933235562143042, 72: 0.00728862802610504, 73: 0.007288628026105042, 74: 0.007288628026105042, 75: 0.007288628026105042, 76: 0.007288628026105042, 77: 0.007288628026105042, 78: 0.007288628026105042, 79: 0.007288628026105042, 80: 0.007288628026105042, 81: 0.007288628026105042, 82: 0.007288628026105042, 83: 0.007288628026105042, 84: 0.007288628026105042, 85: 0.007288628026105042, 86: 0.007288628026105042, 87: 0.007288628026105042, 88: 0.0010933235562143042, 89: 0.007288628026105042, 90: 0.007288628026105042, 91: 0.007288628026105042, 92: 0.0010933235562143042, 93: 0.007288628026105042, 94: 0.007288628026105042, 95: 0.007288628026105042, 96: 0.007288628026105042, 97: 0.007288628026105042, 98: 0.007288628026105042, 99: 0.007288628026105042, 100: 0.007288628026105042, 101: 0.007288628026105042, 102: 0.00728862802610504, 103: 0.007288628026105042, 104: 0.007288628026105042, 105: 0.007288628026105042, 106: 0.007288628026105042, 107: 0.007288628026105042, 108: 0.007288628026105042, 109: 0.007288628026105042, 110: 0.007288628026105042, 111: 0.007288628026105042, 112: 0.007288628026105042, 113: 0.007288628026105042, 114: 0.007288628026105042, 115: 0.007288628026105042, 116: 0.007288628026105042, 117: 0.007288628026105042, 118: 0.0010933235562143042, 119: 0.007288628026105042, 120: 0.0010933235562143042, 121: 0.007288628026105042, 122: 0.007288628026105042, 123: 0.007288628026105042, 124: 0.007288628026105042, 125: 0.0010933235562143042, 126: 0.007288628026105042, 127: 0.007288628026105042, 128: 0.007288628026105042, 129: 0.007288628026105042, 130: 0.007288628026105042, 131: 0.007288628026105042, 132: 0.007288628026105042, 133: 0.007288628026105042, 134: 0.007288628026105042, 135: 0.007288628026105042, 136: 0.007288628026105042, 137: 0.007288628026105042, 138: 0.007288628026105042, 139: 0.007288628026105042, 140: 0.007288628026105042, 141: 0.00728862802610504, 142: 0.007288628026105042, 143: 0.007288628026105042}
部分投诉内容表示,课前宣传时,某位老师直播课程并陪跑,实际上是录播课程,“开课吧”针对一些课程承诺按合同约定完成内容便可返还学费,但实际并未履行
这些宣传吸引了不少学员在“开课吧”开课
近日,小魏发现课程的直播和录播课均已无法打开
近日,“开课吧”还陷入直播课断更、学员学费不按约定退款的舆论风波
负债10亿 极尽所能保证“开课吧”活着

TextRank算法实践相关推荐

  1. TextRank算法学习及使用

    文章目录 一.算法思想 二.python代码实现 三.TextRank算法使用 1.textrank4zh模块的安装 2.实例介绍 总结 参考资料:    文本关键词抽取.文本摘要生成是自然语言处理( ...

  2. 深度学习算法实践(基于Theano和TensorFlow)

    深度学习算法实践(基于Theano和TensorFlow) 闫涛 周琦 著 ISBN:9787121337932 包装:平装 开本:16开 用纸:胶版纸 正文语种:中文 出版社:电子工业出版社 出版时 ...

  3. 独家 | 基于TextRank算法的文本摘要(附Python代码)

    作者:Prateek Joshi 翻译:王威力 校对:丁楠雅 本文约3300字,建议阅读10分钟. 本文介绍TextRank算法及其在多篇单领域文本数据中抽取句子组成摘要中的应用. TextRank ...

  4. 人脸验证 DeepID 算法实践

    人脸验证 DeepID 算法实践 4,610 次阅读 - 文章 作者:雨石  出处:雨石的博客 目前人脸验证算法可以说是DeepID最强,本文使用theano对DeepID进行实现.关于deepid的 ...

  5. 使用TextRank算法为文本生成关键字和摘要

    使用TextRank算法为文本生成关键字和摘要 发表于1年前(2014-12-01 21:31)   阅读(10282) | 评论(27) 155人收藏此文章, 我要收藏 赞15 摘要 TextRan ...

  6. SDCC 2015算法专场札记:知名互联网公司的算法实践

    SDCC 2015算法专场札记:知名互联网公司的算法实践 发表于4小时前|526次阅读| 来源作者投稿|0 条评论| 作者张俊林 SDCC算法架构大数据京东腾讯 摘要:11月21日,为期三天的SDCC ...

  7. 实时通信服务中的语音解混响算法实践

    导读: 随着音视频通信会议越来越普及,与会各方在不同环境中遇到了越来越明显且差异的混响场景,譬如大会议室场景.玻璃会议室场景和小房间且隔音材料不佳场景等.为了保证更好的听音可懂度和舒适度,通信中的语音 ...

  8. 阿里妈妈品牌广告中的 NLP 算法实践

    导读:本次分享的主题为阿里妈妈品牌广告中的 NLP 算法实践,主要内容包括: 1. 品牌广告业务模式与技术架构的简要介绍 2. NLP 算法在品牌搜索广告中的实践,以两个具体的算法问题展开:品牌意图识 ...

  9. 阿里妈妈流量反作弊算法实践

    阿里妈妈是阿里巴巴集团旗下商业数字营销平台.依托阿里巴巴集团核心的商业数据和超级媒体矩阵,为数百万的广告主每年提供上千亿金额的广告服务. 2020年中国互联网广告市场规模达5292亿元,根据秒针< ...

最新文章

  1. 【转】modulenotfounderror: no module named ‘matplotlib._path‘问题的解决
  2. 写给用我的“新闻推荐项目”做毕设的同学们
  3. while(1); 作用
  4. Ubuntu Linux 8.04系统JAVA配置方法
  5. go基础库之环境变量的获取与设置以及如何使用默认值
  6. Linux游戏0 A.D.操作说明(持续更新中)
  7. 高性能I/O设计模式
  8. 诗与远方:无题(二十四)
  9. canvas 绘制贪吃蛇游戏
  10. 关于 Oracle 存储双活配置和实战
  11. ROS学习笔记十二:使用roswtf
  12. php1到12取值,零起点php入门第12课-php数组(1)
  13. sql server 中join 查詢中on後面 加case的用法.
  14. 中国十大邮箱排名、注册邮箱这个品牌更安心!
  15. Python骚操作 | 川普的嘴,骗人的鬼!
  16. linux 计算内存使用率
  17. C++实现输出一个集合的全部子集
  18. 2021年中国集成电路市场现状及封测行业重点企业对比分析:通富微电vs华天科技vs长电科技
  19. VSCode编辑器中对PHP语言的支持
  20. Android开源控件收集整理

热门文章

  1. 贴一点代码(用VC实现在WINXP下的宽带拨号)
  2. 北京法院京牌小客车司法处置数据统计(Pandas)
  3. python gui是什么_python的gui是什么
  4. Qt - 驾校科目-考试系统-窗口交互
  5. HA高可用HADOOP生态群系统搭建
  6. 后端返回PDF文件流,前端处理展示及打印
  7. Revit中视图范围的应用及快速批量视图命名
  8. 题解报告:hdu 1570 A C
  9. Druid简介及常用查询操作
  10. 干货!蓝桥杯单片机组一经验分享