我有一個索引源代碼文件的基於Lucene的程序,我注意到Lucene的StandardTokenizer
沒有分割包含一個點的單詞,例如, foo.bar
。問題在於,在源代碼中,點通常用於方法調用,在這種情況下,應該將對象名稱和方法名稱分開。通用源代碼Lucene標記器
所以,我的問題是,我該如何去編寫一個自定義的Tokenizer
,它與一般的源代碼(例如沒有特定的編程語言)一起工作良好?有沒有現有的實現?
我有一個索引源代碼文件的基於Lucene的程序,我注意到Lucene的StandardTokenizer
沒有分割包含一個點的單詞,例如, foo.bar
。問題在於,在源代碼中,點通常用於方法調用,在這種情況下,應該將對象名稱和方法名稱分開。通用源代碼Lucene標記器
所以,我的問題是,我該如何去編寫一個自定義的Tokenizer
,它與一般的源代碼(例如沒有特定的編程語言)一起工作良好?有沒有現有的實現?
你可以看看this article on onjava.com關於使用Lucene索引源代碼,已經有幾年了,但可以作爲指導。關於標記器,他們使用的LowerCaseTokenizer似乎做你想要的。
您可以更改StandardTokenizer的語法(JFlex)以在點上分割並生成自定義Tokenizer。這就是我在Generating a custom Tokenizer for new TokenStream API using JFlex/ Java CC所做的。
OR
您可以也有上點分割一個TokenFilter並創建自定義分析出StandardTokenizer的這種新TokenFilter。 (查看StandardAnalyzer的功能,並在其中插入新的TokenFilter)。