Page 274 - 《软件学报》2021年第7期
P. 274

2192                                     Journal of Software  软件学报 Vol.32, No.7,  July 2021

                    分句“一堆堆错误”依存句法关系有向图(图 1 示例中(3))中不包含并列关系(COO),也不具有动词与宾语的
                 依存关系(VOB/IOB/FOB),符合单一主题判断规则,因而应用单一主题判断规则进行处理,只对分句依存句法关
                 系有向图进行剪枝操作,剪枝操作结果如图 7 所示.



                                  Fig.7    Example of single topic judgment rule processing clause result
                                           图 7   单一主题判断规则处理分句结果示例
                    通过主题判断规则与剪枝操作,基于复杂用户评论分句的依存句法关系有向图抽取了复杂用户评论分句
                 的主题以及主题相关词,将复杂用户评论的代码质量属性判断转化成了主题对应代码质量属性的识别与分析,
                 降低了问题的复杂度,有助于判断复杂用户评论的代码质量属性.
                 4.2.2  识别各主题对应的代码质量属性
                    经过第 4.2.1 节抽取复杂用户评论的主题后,获取了复杂用户评论分句的主题和主题相关词.为了能够准确
                 判断复杂用户评论的代码质量属性,需要识别复杂用户评论分句中各主题对应的代码质量属性.在第 3 节中,本
                 文基于前期工作对每个代码质量属性的特征词库进行扩充,增加了代码质量属性特征词对.因此,在抽取了复杂
                 用户评论分句的主题与主题相关词后,可以应用代码质量属性特征词对或特征词匹配各主题对应的主题相关
                 词以识别主题对应的代码质量属性.识别复杂用户分句中各主题对应代码质量属性算法如算法 1 所示.
                    算法 1. 识别各主题对应的代码质量属性.
                    Input:TopicKeyWords=[topicWords 1 ,…,topicWords x ,…,topicWords k ]//复杂用户评论分句的主题与主题相关
                 词,其中,topicWords x =(topic x ,topicword x )为二元组,k 为分句中主题的个数
                    codeQualityAttributeFeatureWord={Attribute 1 :FeatureWordList 1 ,…,Attribute a :FeatureWordList a ,…,Attribute 11 :
                 FeatureWordList 11 }(1≤a≤11))//11 个代码质量属性特征词库
                    Output:codeQualityAttribute//主题对应的代码质量属性列表
                    1 codeQualityAttribute=[]//初始化主题对应的代码质量属性列表为空
                    2 for topicWords in TopicKeyWords://遍历
                    3    topicwords=topicWords[1]//主题相关词位于二元组的第 2 个位置
                    4    for Attribute a ,FeatureWordList a  in codeQualityAttributeFeatureWord://遍历代码质量属性特征词库
                    5        mixset=list(set(FeatureWordList a ).intersection(set(topicwords)))//获取主题相关词与代码质量属
                                                                                性特征词的交集
                    6        T=(topic=topic T ,exp=exp T )//初始化一个新的主题二元组,其中,topic T ,exp T 均为空
                    7        if len(mixset)>0://主题相关词与代码质量属性特征词的交集不为空
                    8            topic T =Attribute a //识别主题对应的代码质量属性
                    9            exp T =topicwords//主题相关词构成主题对应代码质量属性的表现
                    10           codeQualityAttribute.append(T)
                    通过算法 1 可以识别出复杂用户评论分句中各主题对应的代码质量属性以及代码质量属性相关的信息,
                 此时,复杂用户评论中的多个主题可能对应同一种代码质量属性,也可能对应多种不同的代码质量属性.而在针
                 对代码的复杂用户评论中,同种代码质量属性之间及不同代码质量属性之间均具有一定的逻辑关系.因此,通过
                 识别复杂用户评论各主题对应的代码质量属性,有助于复杂用户评论代码质量属性的判断.
                 4.3   代码质量属性表现与代码质量属性表现结果识别
                    通过第 4.2 节的处理,基于依存句法关系有向图及主题判断规则可以识别出复杂用户评论分句中各主题对
                 应的代码质量属性.针对代码的复杂用户评论中一般包含多个代码质量属性,且在用户评论中多个代码质量属
                 性之间具有一定的逻辑关系.例如,第 4.1 节中的复杂用户评论分句“而且没有注释所以看不懂”,存在两个主题,
                 两个主题对应的代码质量属性均为“可读性”.两个主题对应的代码质量属性之间由因果连词“所以”连接,则根
   269   270   271   272   273   274   275   276   277   278   279