摘要
Npm(Node Package Manager)作为JavaScript语言的软件包管理器,管理着超过250万的开源第三方库——npm包。由于缺少合适的分类方式,海量的软件资源面临着管理与检索的难题。在开发者分享和交流npm包的开源社区中,自定义的标签在描述包功能的同时也起到了一定程度的分类作用,然而当前的标签机制存在着内容混杂、同义词表述形式不同等问题,无法满足管理与检索的需求。不仅如此,npm社区中超过四成的包缺少标签,且庞大的数量使得无法以人工方式实现标签补全。为此,本文围绕npm社区类别标签构建和自动化的npm包多标签分类方法这两个问题展开研究。 (1)提出了一种基于标签关联关系构建类别标签的方法,来为npm包面向功能构建分类类别。该方法首先利用关联关系挖掘算法为npm社区中的标签生成标签关联关系图。其次通过社区检测算法将标签基于关联关系聚类,形成多个表示独立功能的标签关联社区。最后,通过人工方式筛选、合并标签关联社区,并根据标签在社区中的影响力设计了类别标签识别机制。本文对npm社区中被依赖次数最多的8000个包应用此方法,得到了具有代表性的35个类别标签。 (2)提出了一种面向Readme文档的多标签文本分类方法,实现npm包的自动化分类。该方法首先根据自述文档Readme的内容结构,制定了针对于提取功能描述信息的内容切分方案。其次采用带有权重的关键词集去捕捉Readme文档中的分类信息与类别标签之间的语义关联,使得方法在分类准确性上优于传统的多标签文本分类方法。方法中先基于有监督的主题模型L-LDA训练时生成的主题词分布来构建类别标签关键词集。再利用词移距离算法计算待分类包的Readme文档与各类别标签关键词集的语义相似度。最后根据相似度的排序结果赋予待分类包类别标签。 经过实验验证,本文所提出的面向Readme文档的多标签文本分类方法可以有效地为npm包从功能上进行分类。与作为基线的多标签分类方法相比,本文方法在Macro-F1,Hamming Loss和LRAP三个多标签分类评价指标上均有大幅提升,验证了方法分类的准确性。同时,该方法对实际的无标签包分类中也有较好表现,从而验证了方法的有效性。此外,本文为开源npm包分类研究建立了具有代表性的数据集。