Javaアプリケーションでいくつかの英語のテキストを処理しています。たとえば、「amenities/amenity」というテキストから「amenit」を取得する必要があります。
関数は次のようになります。
String stemTerm(String term){
...
}
Lucene Analyzerを見つけましたが、必要なものには複雑すぎるように見えます。 http://lucene.Apache.org/Java/2_2_0/api/org/Apache/lucene/analysis/PorterStemFilter.html
アナライザーを構築せずに単語をステミングする方法はありますか?アナライザーのすべてのビジネスを理解していません...
[〜#〜] edit [〜#〜]:私は実際にステミング+見出し語化が必要です。 Luceneはこれを実行できますか?
SnowballAnalyzerは非推奨です。代わりにLucene Porter Stemmerを使用できます。
PorterStemmer stem = new PorterStemmer();
stem.setCurrent(Word);
stem.stem();
String result = stem.getCurrent();
このヘルプを願っています!
「EnglishAnalyzer」を使用しないのはなぜですか?それを使用するのは簡単で、あなたの問題を解決すると思います:
EnglishAnalyzer en_an = new EnglishAnalyzer(Version.LUCENE_34);
QueryParser parser = new QueryParser(Version.LUCENE_34, "your_field", en_an);
String str = "amenities";
System.out.println("result: " + parser.parse(str)); //amenit
それがあなたを助けることを願っています!
前の例では、検索クエリにステミングが適用されます。したがって、全文をステミングすることに関心がある場合は、次を試してください。
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");
}
}
TermAttributeクラスは非推奨になり、Lucene 4ではサポートされなくなりますが、ドキュメントはその場所で何を使用するか明確ではありません。
また、最初の例では、PorterStemmerはクラス(非表示)として使用できないため、直接使用することはできません。
お役に立てれば。
JavaでSnowball Stemmerを使用する方法は次のとおりです。
import org.tartarus.Snowball.ext.EnglishStemmer;
EnglishStemmer english = new EnglishStemmer();
String[] words = tokenizer("bank banker banking");
for(int i = 0; i < words.length; i++){
english.setCurrent(words[i]);
english.stem();
System.out.println(english.getCurrent());
}
Ling pipe は、多数のトークナイザーを提供します。それらは、ステミングに使用でき、Wordの削除を停止できます。そのシンプルで効果的なステミングの手段。