第一件事我會嘗試與傳遞到JapaneseAnalyzer參數,搞亂特別是Tokenizer.Mode(我知道的這些選項的意圖恰恰沒有對日本語言的結構,所以沒有幫助從我) 。
除非是
你需要創建自己的分析這一點。除非你願意編寫自己的Tokenizer,否則最終的結果可能是最好的。創建一個分析器非常簡單,創建一個標記器將意味着定義你自己的語法,這不會那麼簡單。
看看爲JapaneseAnalyzer和StandardAnalyzer代碼,尤其是呼叫createComponents
,這是所有你需要實現創建自定義分析。
說你來定論StandardTokenizer
是你正確的,但除此之外,我們將主要使用日本的過濾器設置,它可能看起來像:
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
//For your Tokenizer, you might consider StandardTokenizer, JapaneseTokenizer, or CharTokenizer
Tokenizer tokenizer = new StandardTokenizer(version, reader);
TokenStream stream = new StandardFilter(version, tokenizer);
stream = new JapaneseBaseFormFilter(stream);
stream = new LowerCaseFilter(matchVersion, stream); //In JapaneseAnalyzer, a lowercasefilter comes at the end, further proving I don't know Japanese.
stream = new JapanesePartOfSpeechStopFilter(true, stream, stoptags);
stream = new CJKWidthFilter(stream); //Note this WidthFilter! I believe this does the char width transform you are looking for.
stream = new StopFilter(matchVersion, stream, stopwords);
stream = new JapaneseKatakanaStemFilter(stream);
stream = new PorterStemFilter(stream); //Nothing stopping you using a second stemmer, really.
return new TokenStreamComponents(tokenizer, stream);
}
這是一個完全隨機的實施,從不明白問題的人,但希望能指出實現更有意義的分析儀的方式。您在該過濾器鏈中應用過濾器的順序非常重要,因此請小心(例如,在英語中,LowerCaseFilter通常應用得比較早,因此Stemmers不必擔心大小寫)。