实施Kstemmer

时间:2014-07-21 23:53:25

标签: java eclipse apache stemming

首先,我感谢任何花时间提供帮助的人。互联网社区对学习至关重要。

总体目标:我正在输入.txt文件,在Eclipse中使用The 2003 CIIR KStemmer的Java版本来生成它,并将词干列表输出到不同的.txt文件中。

简单:输入.txt,将.txt排序成字符串或字符数组,输出.txt

问题:我不明白如何在主代码中使用词干分析器。

我已将CIIR代码包含在类文件(KStemmer.java)中并导入以下库:

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并获得输出?

2 个答案:

答案 0 :(得分:1)

请记住KStemmer()是默认构造函数,它没有任何访问说明符,因此您无法使用import package org.apache.lucene.analysis.en调用自己的代码。 ;

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

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

答案 1 :(得分:0)

KStemmer没有任何公共方法,表明它是间接调用的。 KStemFilter位于org.apache.lucene.analysis.en包中,TokenStream位于它旁边,因此我非常确定词干分析符用于java.io.Reader(例如,作为分析链的一部分)。< / p>

这是一个简单的主要类,它将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 + " "); } } } ,然后打印出令牌。

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

以下是我用来解决上述导入的Maven依赖项:

string = "text like hello world"
print(string)
f = open('fileaddress', 'w')
f.write(string)