2014-07-21 141 views
0

首先,我要感谢任何花时间帮助的人。互联网社区对学习非常重要。实施Kstemmer

总体目标:我输入.txt文件,在Eclipse中使用Java编译的The 2003 CIIR KStemmer进行抑制,并将干扰词列表输出到不同的.txt文件中。

简单:输入txt文件,将.TXT整理成字符串或字符数组,输出.TXT

问题:我不知道如何使用我的主代码中的词干。

我已经包括在一个类文件(KStemmer.java)的CIIR代码和进口下面的库:

Apache的lucene的-analyzers.jar

Apache的lucene.jar

的Lucene分析仪,共4.2.0.jar

Lucene的核心 - 3.4.0.jar

在我的主类(StemThis.Java)我想要做这样的事情:

String wordFromTextFile = new String(); // input word 
String stemmedWord = new String();  // output word 
printer = new PrintWriter("outputFile") // for file export 

KStemmer newStemmer = new KStemmer(); // creating a stemmer 
newStemmer.stem(wordFromTextFile); // stemming a word 
stemmedWord = newStemmer.return(); // get stemmed word from stemmer 

printer.println(stemmedWord); // desired output method 

这显然是过于简单了。也许KStemmer不以这种方式工作。如何将字符串放入KStemmer并获得输出?

回答

1

请注意KStemmer()是一个默认构造函数,它没有任何访问说明符,所以你不能通过使用import包org.apache.lucene.analysis.en来调用你自己的代码;

一个解决方案是使用PorterStemFilter,但它是一个积极的词干。

第二种解决方案是下载所有的源文件并将它们包含在您自己的包中并更改包名称。

0

KStemmer没有任何公共方法,这表明它的意思是间接调用。 KStemFilter位于org.apache.lucene.analysis.en包的旁边,所以我非常肯定这个stemmer是用于TokenStream(例如作为分析链的一部分)。

这是一个简单的主类,将java.io.Reader变成TokenStream,将它传递给KStemFilter,然后打印出令牌。

import org.apache.lucene.analysis.TokenStream; 
import org.apache.lucene.analysis.core.WhitespaceTokenizer; 
import org.apache.lucene.analysis.en.KStemFilter; 
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; 
import org.apache.lucene.util.Version; 

import java.io.IOException; 
import java.io.Reader; 
import java.io.StringReader; 

public class KStemmerTestMain { 

    public static void main(String[] args) throws IOException { 

     Reader inputReader = new StringReader("I liked to tested that my inputs are stemming fantastically"); 

     TokenStream whitespaceTokenizer = new WhitespaceTokenizer(Version.LUCENE_42, inputReader); 
     TokenStream kStemmedTokenStream = new KStemFilter(whitespaceTokenizer); 

     // This attribute is updated in place every time incrementToken() is called. 
     CharTermAttribute charTermAttribute = kStemmedTokenStream.addAttribute(CharTermAttribute.class); 

     // Many TokenStreams are stateful and must be reset before calling incrementToken() 
     kStemmedTokenStream.reset(); 
     while (kStemmedTokenStream.incrementToken()) { 
      String term = charTermAttribute.toString(); 
      System.out.print(term + " "); 
     } 
    } 
} 

下面是我用来获取Maven依赖上述进口来解决:

<dependencies> 
    <dependency> 
     <groupId>org.apache.lucene</groupId> 
     <artifactId>lucene-analyzers-common</artifactId> 
     <version>4.2.1</version> 
    </dependency> 
</dependencies>