2012-07-27 42 views
1

什么是一个很好的Lucene分析器,用于混合文本和不同源代码的文档?例如,我希望“C”和“C++”被视为不同的单词,并且我希望Charset.forName("utf-8")在类名称和方法名称之间拆分,并且要将参数视为一个或两个单词。什么是用于文本和源代码的好Lucene分析器?

我想看一个很好的示例数据集是StackOverflow本身。我相信StackOverflow使用Lucene.NET进行搜索;它是否使用股票分析器,还是它已经大量定制?

+1

你有没有看:http://lucene.apache.org/solr/api-4_0_0-ALPHA/org/apache/solr/analysis/WordDelimiterFilterFactory.html?它适用于Solr,但您可以使用相同的技巧来定义您想要如何分割令牌...... – condit 2012-08-02 18:21:48

回答

0

您可能最好使用WhitespaceTokenizer并对其进行自定义以去除标点符号。例如,除了'+',' - '之外,我们除去所有的puncutation,以便诸如C++等的词被留下,但是开始和结束的引号以及括号等都被留下。实际上,对于这样的事情,您可能需要使用不同的标记器添加文档两次以捕获文档的不同部分。即一次使用StandardTokenizer,一次使用WhitespaceTokenizer,在这种情况下,StandardTokenizer将分割你的所有代码,例如,在类和方法名称之间,因为空白字符会提取诸如C++之类的字词。显然,它的种类取决于语言,但例如, Scala允许在方法名称中使用一些标点符号。