[英]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.