teaser
今天简单来介绍和实现textteaser摘要算法:
统计指标:
1)句子长度,长度为某个长度的句子为最理想的长度,依照距离这个长度的远近来打分。
2)句子位置,根据句子在全文中的位置,给出分数。(比如每段的第一句是核心句的比例大概是70%)
3)句子关键词打分,文本进行预处理之后,按照词频统计出排名前10的关键词,通过比较句子中包含关键词的情况,以及关键词分布的情况来打分。
综合上述3步的打分做累加,然后倒排得到每个句子的重要性得分,此时要考虑到摘要的可读性,通俗的做法是按照句子在文章中出现的顺序来输出。
def computeScore(self, sentences, topKeywords): keywordList = [keyword['word'] for keyword in topKeywords]#先把频率最高的几个单词取出来 summaries = []#设置一个摘要列表 self.ws = Wordsegmentation(stop_words_file=None, allow_speech_tags=libiary2.allow_speech_tags) for i, sentence in enumerate(sentences):#枚举句子 sent = self.parser.removePunctations(sentence)#去除句子中的标点 words=self.ws.segment(text=sent, lower=True, use_stop_words=False, use_speech_tags_filter=False)#对句子进行分词 sbsFeature = self.sbs(words, topKeywords, keywordList)#传入参数,句子单词,文章最高频率单词以及这些单词,返回1/单词数目*句子分数 dbsFeature = self.dbs(words, topKeywords, keywordList) sentenceLength = self.parser.getSentenceLengthScore(words)#理想句子长度是20,求句子长度得分 sentencePosition = self.parser.getSentencePositionScore(i, len(sentences))#得到句子位置权重 keywordFrequency = (sbsFeature + dbsFeature) / 2.0 * 10.0 totalScore = (keywordFrequency * 2.0 + sentenceLength * 0.5 + sentencePosition * 1.0) / 4.0 summaries.APPend({ # 'titleFeature': titleFeature, # 'sentenceLength': sentenceLength, # 'sentencePosition': sentencePosition, # 'keywordFrequency': keywordFrequency, 'totalScore': totalScore, 'sentence': sentence, 'order': i }) return summaries
相关阅读
自动排课算法总结 http://blog.csdn.net/Sinde1992/article/details/50321225 零.与遗传算法的比较 遗传的优点: 全局寻优能力强,
今天在学习最小二乘法的时候遇到了solve函数,用来解线性方程 A*X=B参考官方文档bool cv::solve(InputArray src1, InputArray
小试牛刀–++克鲁斯卡尔算法++ 考研资料书本定义:克鲁斯卡尔算法思想:每次找出侯选边中权值最小的边,就将该边并入生成树中。重复
9.2.4 Term Vector 返回一个特定文档的信息和字段的统计信息,这里的文档可以索引中存储的文档,也可以是用户手动提供的,Term vecto
autojs调用java的类库爬取bilibili视频弹幕内容,get请
/** * @功能 爬取指定bilibili视频弹幕 * @作者 家 * @感谢 内个谁, ProjectXero * @难点 不会解压gzip和deflate,再次感谢上