簡體   English   中英

Lucene Porter Stemmer - 獲取原始的非詞干詞

[英]Lucene Porter Stemmer - get original unstemmed word

我已經研究出如何使用 Lucene 的 Porter Stemmer,但還想檢索原始的、未詞干的詞。 因此,為此,我在創建 PorterStemFilter 之前向 TokenStream 添加了 CharTermAttribute,如下所示:

Analyzer analyzer = new StandardAnalyzer();
TokenStream original = analyzer.tokenStream("StandardTokenStream", new StringReader(inputText));
TokenStream stemmed = new PorterStemFilter(original);
CharTermAttribute originalWordAttribute = original.addAttribute(CharTermAttribute.class);
CharTermAttribute stemmedWordAttribute = stemmed.addAttribute(CharTermAttribute.class);

stemmed.reset();
while (stemmed.incrementToken()) {
    System.out.println(stemmedWordAttribute+" "+originalWordAttribute);
}

不幸的是,這兩個屬性都返回詞干。 有沒有辦法獲得原始單詞?

Lucene 的PorterStemFilter可以與 Lucene 的KeywordRepeatFilter結合使用。 Porter Stemmer 使用它來提供詞干和非詞干標記。

修改你的方法:

Analyzer analyzer = new StandardAnalyzer();
TokenStream original = analyzer.tokenStream("StandardTokenStream", new StringReader(inputText));
TokenStream repeated = new KeywordRepeatFilter(original);
TokenStream stemmed = new PorterStemFilter(repeated);
CharTermAttribute stemmedWordAttribute = stemmed.addAttribute(CharTermAttribute.class);

stemmed.reset();
while (stemmed.incrementToken()) {
    String originalWord = stemmedWordAttribute.toString();
    stemmed.incrementToken();
    String stemmedWord = stemmedWordAttribute.toString();
    System.out.println(originalWord + " " + stemmedWord);
}

這相當粗糙,但顯示了方法。

示例輸入:

testing giraffe book passing

結果輸出:

testing test
giraffe giraff
book book
passing pass

對於每對標記,如果第二個與第一個( book book )匹配,則沒有詞干。


通常,您會將此與RemoveDuplicatesTokenFilter一起使用來刪除重復的book術語 - 但如果您這樣做,我認為跟蹤詞干/非詞干對會變得更加困難-因此對於您的特定情況,我沒有使用該重復數據刪除過濾器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM