Ví dụ trước đây được áp dụng bắt nguồn cho một truy vấn tìm kiếm, vì vậy nếu bạn là thú vị để ngăn chặn một văn bản đầy đủ, bạn có thể thử như sau:
import java.io.*;
import org.apache.lucene.analysis.*;
import org.apache.lucene.analysis.tokenattributes.*;
import org.apache.lucene.analysis.snowball.*;
import org.apache.lucene.util.*;
...
public class Stemmer{
public static String Stem(String text, String language){
StringBuffer result = new StringBuffer();
if (text!=null && text.trim().length()>0){
StringReader tReader = new StringReader(text);
Analyzer analyzer = new SnowballAnalyzer(Version.LUCENE_35,language);
TokenStream tStream = analyzer.tokenStream("contents", tReader);
TermAttribute term = tStream.addAttribute(TermAttribute.class);
try {
while (tStream.incrementToken()){
result.append(term.term());
result.append(" ");
}
} catch (IOException ioe){
System.out.println("Error: "+ioe.getMessage());
}
}
// If, for some reason, the stemming did not happen, return the original text
if (result.length()==0)
result.append(text);
return result.toString().trim();
}
public static void main (String[] args){
Stemmer.Stem("Michele Bachmann amenities pressed her allegations that the former head of her Iowa presidential bid was bribed by the campaign of rival Ron Paul to endorse him, even as one of her own aides denied the charge.", "English");
}
}
Lớp TermAttribute đã bị phản đối và sẽ không còn được hỗ trợ trong Lucene 4, nhưng các tài liệu không rõ ràng về những gì để sử dụng tại chỗ của nó.
Cũng trong ví dụ đầu tiên PorterStemmer không khả dụng dưới dạng lớp (ẩn) để bạn không thể sử dụng trực tiếp.
Hy vọng điều này sẽ hữu ích.
Nguồn
2011-12-30 16:37:30
Tại sao bạn cần phải xuất phát từ bản thân? Lucene có một máy phân tích tên là SnowballAnalyzer mà bạn vừa tạo ra với tên gốc, ví dụ: 'SnowballAnalyzer mới (" tiếng Anh ");'. – Thomas
Thực hiện thuật toán Knuth-Pratt http://www.fmi.uni-sofia.bg/fmi/logic/vboutchkova/sources/KMPMatch_java.html –