论文部分内容阅读
软件复用可以有效地减少项目开发中的重复劳动。近年来,随着软件复用技术的逐渐成熟以及Internet上开源软件的逐渐增多,软件开发人员在项目开发的过程中越来越多地复用开源软件。开源项目通常会提供诸如用户手册、FAQ页面、邮件列表等文档来帮助用户更好地理解和使用开源项目。其中邮件列表中蕴含丰富的软件问答信息,但由于邮件的数量巨大,邮件内容组织繁杂等因素使得其不易于被阅读和浏览。通过对Apache上知名开源项目的调研发现,邮件中的软件问答信息有着内容混杂、问题不明确、答案定位困难等问题,开发人员在查询邮件中的软件问答信息时会花费大量的时间和精力。为此,需要一个自动化的邮件问答信息分析、抽取机制,帮助开发人员高效地获取与开源项目相关的问答信息。基于上述目标,本文对如何获取开源项目归档邮件、如何对开源项目邮件内容标注分类、如何抽取邮件问题信息以及如何抽取邮件答案信息四个问题进行了分析研究,进而设计并实现了一种基于开源软件邮件列表的软件问答信息抽取方案,该方案包括: ⑴从开源项目的官方网站抓取项目邮件归档文件,解析邮件归档文件并将邮件组织成会话形式。开源项目的开发邮件或者用户邮件通常以邮件归档的形式保存,并在其官网上发布链接地址。从网站上抓取下来的邮件归档文件需要进行解析后按照讨论的主题组织成会话形式,一个邮件会话中整合了对特定提问邮件的回复。由于开源软件的归档邮件通常以mbox文件格式存储,本文实现了一个mbox文件解析器以解析出邮件并将邮件组织成会话形式。 ⑵实现了基于解析的邮件内容分类器,对开源项目邮件的内容进行分类。经过调研发现,开源项目的邮件中通常会包含自然语言文本、代码片段、异常文本信息、邮件引用、冗余文本等多类型的内容。本文将邮件内容分为代码片段、异常信息、邮件引用、冗余文本和正文文本等五种类别,方便进一步分析、抽取邮件中的问答信息。本文总结了邮件内容的特点,利用解析的方法对邮件内容进行分类处理。 ⑶提出了一种基于序列模式挖掘的问题句式挖掘方法。在邮件会话中,人们通常会关注发件人阐述自己问题的问题句。由于邮件文本的非正式性,问题句并不一定以疑问标点结尾,并且问题可能以陈述句式提出,因此,传统的基于疑问词以及疑问标点的方法去抽取问题句的效果不佳。本文采用数据挖掘中的序列模式挖掘方法,使用改进的PrefixSpan算法从标注的数据中挖掘常见的问题句的模式,用模式匹配的方法找出提问邮件中的问题句,并与之前抽取的代码和异常信息结合,组成邮件的问题信息。 ⑷采用基于内容特征和非内容特征相结合的方法从邮件会话中定位答案信息。内容特征方面,本文工具使用文本检索中通常使用的文本余弦相似度和字词匹配等方法来定位答案信息,另外,在邮件内容预处理阶段标注出的代码元素及邮件内容引用等特征也被加入到答案信息的度量中;非内容特征方面,本文工具统计了邮件作者的信息(发件数,回复数,是否为开发人员等)以衡量邮件作者的权威度,同时将邮件在会话中的位置以及提问作者对答复邮件的态度也作为答案信息的度量特征。 ⑸本文设计并实现了一个基于邮件列表的软件问答信息抽取工具。本文对该工具的设计和实现进行了详细的介绍,对工具中的技术难点、核心算法及关键模块进行了详细的描述。最后本文以Lucene为例,通过实验验证了本文工具的有效性和合理性。