主要是数据结构来压缩和搜索源代码

假设你有很多流行语言(Java,C,C ++等)的源代码(比如50GB +)。

该项目的需求是:

  • 压缩源代码以减少磁盘使用和磁盘I / O

  • 索引它的方式是可以从压缩的源文件中提取特定的源文件而不需要解压缩整个文件

  • 整个代码库的压缩时间并不重要

  • 搜索和检索时间(以及搜索和检索时使用的内存)非常重要

  • 这个答案包含潜在的答案:什么是鲜为人知,但有用的数据结构?

    但是,这只是一个潜力列表 - 我不知道这些结构是如何根据上面列出的要求实际评估的。

    问题:根据上述要求,哪些数据结构(及其实现)能够很好地发挥作用?


    用于搜索的主要数据结构是倒排列表。 幸运的是,你不需要自己实现它。 Lucene是一个广泛使用的搜索工具,可以在内部使用倒排列表。

    使用Lucene你可以创建一个包含多个字段的文档。 这个想法是,这些字段中的一部分可以通过标准的关键字类型查询进行搜索。

    我已经实现了一个源代码搜索实用程序,现在我将在下面的段落中进行简要介绍。 整个源代码本身存储为名为“code”的非可索引字段(您可以修改源以存储压缩版本)。

    对于检索部分,请注意您要用于搜索的关键字可能是函数,类,包或变量的名称。 它们也可以是来自评论等的单词。 在我的实现中,我使用Java注释语法树(AST)提取了这些信息。 您也可以通过使用合适的解析器构建AST来为其他语言做同样的事情。

    另一种可能性是查询范例(QBE)范例,您可以使用一小段代码从索引代码库中搜索大致相似的片段。 这对检测源代码重用和剽窃特别有用,这是我开发该工具的主要目的。

    项目页面在这里。 我称之为YASOCS(另一个SOURCE代码搜索器)。

    搜索速度非常快,因为它使用倒排列表。 你也可以使用Luke(一个开源的Lucene索引可视化器)自己“查看”索引并使用该界面执行测试查询。

    链接地址: http://www.djcxy.com/p/39857.html

    上一篇: mostly data structure to compress and search source code

    下一篇: How do structures affect efficiency?