【发布时间】:2012-08-03 19:02:43
【问题描述】:
我有一个基于 Lucene 的程序来索引源代码文件,我注意到 Lucene 的 StandardTokenizer 不会拆分包含点的单词,例如foo.bar。这样做的问题是,在源代码中,点通常用于方法调用,在这种情况下,对象名和方法名应该分开。
所以,我的问题是,我该如何编写一个自定义的Tokenizer,它通常适用于源代码(例如,没有特定的编程语言)?有没有现成的实现?
【问题讨论】:
我有一个基于 Lucene 的程序来索引源代码文件,我注意到 Lucene 的 StandardTokenizer 不会拆分包含点的单词,例如foo.bar。这样做的问题是,在源代码中,点通常用于方法调用,在这种情况下,对象名和方法名应该分开。
所以,我的问题是,我该如何编写一个自定义的Tokenizer,它通常适用于源代码(例如,没有特定的编程语言)?有没有现成的实现?
【问题讨论】:
您可以查看this article on onjava.com 关于使用 Lucene 索引源代码的信息,它已有多年历史,但可以作为指导。关于标记器,他们使用 LowerCaseTokenizer 似乎可以满足您的要求。
【讨论】:
您可以将 StandardTokenizer 的语法 (JFlex) 更改为按点拆分,并生成您的自定义 Tokenizer。这就是我在Generating a custom Tokenizer for new TokenStream API using JFlex/ Java CC 所做的。
或
您也可以拥有一个按点分割的 TokenFilter,并使用 StandardTokenizer 和这个新的 TokenFilter 创建一个自定义分析器。 (看看 StandardAnalyzer 做了什么,只需在其中插入这个新的 TokenFilter)。
【讨论】: