论文部分内容阅读
开源社区又称为开放源代码社区,是一种由拥有共同兴趣爱好的人员组成的,根据相应的开源软件许可证协议公布源代码的平台。伴随着开源软件、互联网和Web技术的蓬勃发展,基于Web的开源社区已经成为互联网开源软件的数据和资源中心。开源社区中的Web数据蕴藏着丰富的关于软件的知识,挖掘这些知识对于了解软件结构、功能、复杂性、演化规律以及了解项目开发团队的组织、开发人员的配比合作关系等来说至关重要。然而,Web数据的规模庞大、高度异构、高度动态、受众广泛和信息丰度的特性对有效的数据获取和知识挖掘提出了巨大的挑战。在此背景下,本文按照数据获取、数据挖掘和知识应用的顺序,研究了四个核心问题,针对不同的研究问题提出了相应的解决方法;利用互联网开源社区的真实数据验证了方法的有效性。本文主要的研究工作和成果包括:(1)研究了单网页列表信息抽取问题,提出了基于缩进轮廓的单网页信息抽取算法。该算法首先定义了缩进轮廓模型,该模型是一种由HTML文档每行代码的缩进值及行首的HTML标签构成的数据结构,是HTML文档的一种简化抽象,它在简化文档模型的同时保持了文档的重复模式;然后通过检测缩进轮廓中的串联重复波段来定位HTML文档中具有重复模式的代码段,最后利用经典的HTML解析方法抽取数据。实验结果表明,该算法在保证抽取精度的前提下提高了抽取效率。(2)研究了异构多网页信息抽取问题,提出了基于重复内容的异构多网页信息抽取算法。该算法首先构造一个由属性名和可枚举的属性值组成的种子集合,在目标网站的训练网页集合中查找种子属性值;然后,通过字符串匹配的方法定位每一个种子属性在目标网页中的位置,选择具有最大支持度的匹配位置作为抽取规则;最后,结合匹配位置和相对标签节点抽取每个种子属性在目标网站其他网页中的属性值。实验结果表明,该算法很好的利用了同领域不同网站之间数据重复的特性,利用同一个种子属性集合可以抽取异构的多个网站的实体属性值,相对于同领域的其他方法具有更高的效率。(3)研究了开发人员合作关系网络实体排序问题,提出了主题和时间敏感的实体排序算法。算法首先将合作关系网络按照合作主题进行投影,然后在经典的马尔可夫链随机游走模型中扩展了合作时间敏感的状态转移函数,最后根据迭代计算出的各节点排序值对实体进行排序。基于互联网开源社区合作关系数据的实验表明,该算法较传统算法更为精确,能够有效地支持面向不同技术主题、不同时间区间的实体排序,可以支持更细粒度的开发人员搜索应用。(4)研究了开源软件自动分类问题,提出了基于在线增量演化主题模型的软件自动分类算法。算法中,在线增量演化主题模型是在传统LDA主题模型和Gibbs抽样算法的基础上提出的,该模型按照时间单位以分片的方式在线增量式的建立软件文本流的主题模型;通过参数估计获得主题词汇分布和主题文本分布,每个主题由主题标号和核心词汇及分布概率组成,每个软件文本都以特定的概率分配到各个主题中;然后算法利用预设的主题词汇表和第三方词汇本体对主题进行语义标注,完成将每个软件文本分类到具有明确语义标签的主题类属中,实现对软件的自动分类。利用开源社区十年的软件文本数据对算法进行了测试,结果表明该算法分类精确度高于同类算法,同时对于判断主题聚类效果和分析主题演化规律也有很好的参考价值。该算法有力的支撑了按照主题分类搜索软件的应用。为了在实践中检验提出的方法,开发了互联网开源社区资源搜索平台INFLUX。INFLUX通过爬取全球开源社区的项目主页,利用数据抽取技术、数据集成技术将开源软件项目的各种属性信息归档并保存到本地的数据库;将该数据库与软件代码、软件开发过程数据等整合形成一个较为全面的开源软件信息资源库;根据不同实验或者应用的需要可以有针对性的对信息资源库的数据进行挖掘,挖掘的结果可以用于支持不同的应用服务。目前主要支持两个核心应用服务:开发人员搜索和软件资源搜索。开发人员搜索服务是利用合作关系网络实体排序值作为搜索结果的度量,将最满足搜索需求的开发人员尽可能的在靠前的结果中返回;软件资源搜索服务主要利用开源软件自动分类的结果,自动将软件划分到不同的功能类属中,方便用户按照类属以目录的方式浏览搜索软件;同时还支持新功能类属的发现,方便对软件的类属进行调整。综上所述,本文针对开源社区Web数据的特点,研究了开源社区Web数据抽取和数据挖掘的关键技术,提出并实践了新的算法,对于开源社区分析、互联网时代的软件技术具有重要的理论意义,同时对于开源软件搜索、开发人员搜索和软件主题演化等方面具有重要的应用价值。