背景?

做一个能够定位系统故障的自动化工具,在开发过程中分别需要使用爬虫获取公司测试平台的bug描述,以及sonar上面对于代码故障分析的爬虫,通过获取的这些数据对系统故障进行定位、分析和分类,由于属于银行类业务,因此会涉及专业词汇分类不准确的情况,从而衍生出“需求文档抽取业务关键字”的需求。

算法基本概念及原理?

TextRank算法是由PageRank算法改进而来的,二者的思想有相同之处,区别在于:PageRank算法是根据网页之间的链接关系构造网络,而TextRank算法是根据词之间的共同出现关系构造网络;TextRank算法构造的网络中的边是无向有权边与PageRank算法构造的网络中的有向无权边不同。
TextRank算法的核心公式如下,其中Wji用于表示两个节点之间的边连接具有不同的重要程度:
公式1.png

为了便于理解给出使用TextRank算法提取关键词和关键词组的具体步骤如下:
  1. 对待测的文档一整句一整句的分割,即截屏2020-07-08 下午2.12.03.png
  2. 对于每个截屏2020-07-08 下午2.12.48.png的句子,都需要进行分词和词性的标注,之后再删除句子中包含的停用词,保留给定词性的候选词,比如名词、动词、形容词等等,即截屏2020-07-08 下午2.13.47.png其中截屏2020-07-08 下午2.14.45.png为句子i中保留下来的词;
  3. 构建词图网络G=(V,E),其中V为节点集合,由以上步骤生成的词组成,然后通过共现关系构造任意两个节点之间的边:当这两个节点之间存在边时,当且仅当这两个有边连接节点对应的词在长度为k的窗口中同时出现,就表示最多出现k个关键词,一般情况下k=2;
  4. 按照上面的公式,不停迭代计算各个节点的权重,直到收敛为止;
  5. 对各个节点的权重进行倒序排序之后,从中得到排序在前面的N个关键词,作为top-N个关键词及词组;
  6. 对于得到的top-N个关键词,在原始文本中进行标记查询与比对,如果它们之间形成了相邻的词组,则可作为关键词组提取出来。

    截屏2020-07-08 下午2.16.00.png

                    图3-2  TextRank关键字提取算法流程图
    

    TextRank算法作为关键词提取方法相较于前面介绍的其他的提取方式最大的优势是TextRank方法是一种基于无监督的提取方法,是根据一个文本作为单元进行处理的,所以就不需要进行大量的语料训练。通过现有的计算机的发展,能够计算和处理的比较快,而且能够适用各种各样的文件格式或者专题类的文档,能在短时间内迅速计算得出结果,并且在关键词抽取成功后,还能实现对摘要的自动生成,整体的效果来说也比较连贯。

遇到的问题?

1. 需求文档获取途径

  • 到svn上面下载下来放入项目文件夹中直接读取(由于对于Python使用还不是很熟练,只能先用这种本方法)
  • 运用爬虫从SVN上爬取下来(接下来准备优化的方向

2. 抽取出来的关键字与专业相关性不大

刚抽取出来的关键字都会技术相关性更大的词组,通过修改更迭停用词表,最后得到业务相关性的关键词组,目前是采用的打印出来的形式,接下来优化的方向是能够直接输出抽取关键字的文档,将此封装成一个工具。


荆棘花
10 声望3 粉丝

感性生活,理性编程