Java 一种简单的输入字符串词干提取算法

Java 一种简单的输入字符串词干提取算法,java,algorithm,stemming,porter-stemmer,Java,Algorithm,Stemming,Porter Stemmer,我一直在研究单词词干提取算法,比如波特算法,但到目前为止,我所发现的一切都是将文件作为输入处理的 是否有任何现有的算法可以让我简单地向词干分析器传递一个字符串,并让它返回带词干的字符串 比如: String toBeStemmed = "The man worked tirelessly"; Stemmer s = new Stemmer(); String stemmed = s.stem(toBeStemmed); 算法本身不接受文件。代码可能会获取文件并将其作为一系列字符串读入,这些字

我一直在研究单词词干提取算法,比如波特算法,但到目前为止,我所发现的一切都是将文件作为输入处理的

是否有任何现有的算法可以让我简单地向词干分析器传递一个字符串,并让它返回带词干的字符串

比如:

String toBeStemmed = "The man worked tirelessly";
Stemmer s = new Stemmer();

String stemmed = s.stem(toBeStemmed);

算法本身不接受文件。代码可能会获取文件并将其作为一系列字符串读入,这些字符串将被提供给算法。您只需要查看从文件中读入字符串的代码部分,然后以类似的方式将字符串传递给您自己。

在您的示例中,
tobestemed
是一个句子,您首先要标记它。然后,你会将单个标记/单词,如“worked”或“untilized”加上词干

这是我在一些项目中用作词干分析器的精细形态学分析器

茎秆分析器罐:
词干分析器源:
语言资源文件:
如何与Lucene配合使用:
属性文件:

用法示例:

import net.sf.jhunlang.jmorph.lemma.Lemma;
import net.sf.jhunlang.jmorph.lemma.Lemmatizer;
import net.sf.jhunlang.jmorph.analysis.Analyser;
import net.sf.jhunlang.jmorph.analysis.AnalyserContext;
import net.sf.jhunlang.jmorph.analysis.AnalyserControl;
import net.sf.jhunlang.jmorph.factory.Definition;
import net.sf.jhunlang.jmorph.factory.JMorphFactory;
import net.sf.jhunlang.jmorph.parser.ParseException;
import net.sf.jhunlang.jmorph.sample.AnalyserConfig;
import net.sf.jhunlang.jmorph.sword.parser.EnglishAffixReader;
import net.sf.jhunlang.jmorph.sword.parser.EnglishReader;
import net.sf.jhunlang.jmorph.sword.parser.SwordAffixReader;
import net.sf.jhunlang.jmorph.sword.parser.SwordReader;

AnalyserConfig acEn = new AnalyserConfig();
//TODO: set path to the English affix file
String enAff = "src/main/resources/resources-lang/jmorph/en.aff"; 
Definition affixDef = acEn.createDefinition(enAff, "utf-8", EnglishAffixReader.class);
//TODO set path to the English dict file
String enDic = "src/main/resources/resources-lang/jmorph/en.dic"; 
Definition dicDef = acEn.createDefinition(enDic, "utf-8", EnglishReader.class);
int enRecursionDepth = 3;
acEn.setRecursionDepth(affixDef, enRecursionDepth);
JMorphFactory jf = new JMorphFactory();
Analyser enAnalyser = jf.build(new Definition[] { affixDef, dicDef });
AnalyserControl acEn = new AnalyserControl(AnalyserControl.ALL_COMPOUNDS);
AnalyserContext analyserContextEn = new AnalyserContext(acEn);
boolean enStripDerivates = true;
Lemmatizer enLemmatizer = new net.sf.jhunlang.jmorph.lemma.LemmatizerImpl(enAnalyser, enStripDerivates, analyserContextEn);


//After somewhat complex initializing, here we go
List<Lemma> lemmas = enLemmatizer.lemmatize("worked");
for (Lemma lemma : lemmas) {
    System.out.println(lemma.getWord());
}
import net.sf.jhunlang.jmorph.lemma.lemma;
导入net.sf.jhunlang.jmorph.lemma.Lemmatizer;
导入net.sf.jhunlang.jmorph.analysis.analyzer;
导入net.sf.jhunlang.jmorph.analysis.AnalyzerContext;
导入net.sf.jhunlang.jmorph.analysis.AnalyzerControl;
导入net.sf.jhunlang.jmorph.factory.Definition;
导入net.sf.jhunlang.jmorph.factory.JMorphFactory;
导入net.sf.jhunlang.jmorph.parser.ParseException;
导入net.sf.jhunlang.jmorph.sample.AnalyserConfig;
导入net.sf.jhunlang.jmorph.sware.parser.EnglishAffixReader;
导入net.sf.jhunlang.jmorph.sware.parser.Englishhreader;
导入net.sf.jhunlang.jmorph.swar.parser.swordafixreader;
导入net.sf.jhunlang.jmorph.swar.parser.swordeader;
AnalyserConfig acEn=新的AnalyserConfig();
//TODO:设置英文词缀文件的路径
String enAff=“src/main/resources/resources lang/jmorph/en.aff”;
定义affixDef=acEn.createDefinition(enAff,“utf-8”,EnglishAffixReader.class);
//TODO设置英文dict文件的路径
字符串enDic=“src/main/resources/resources lang/jmorph/en.dic”;
Definition dicDef=acEn.createDefinition(enDic,“utf-8”,EnglishReader.class);
int enRecursionDepth=3;
acEn.setRecursionDepth(affixDef,enRecursionDepth);
JMorphFactory jf=新JMorphFactory();
Analyzer eAnalyser=jf.build(新定义[]{affixDef,dicDef});
AnalyzerControl acEn=新的AnalyzerControl(AnalyzerControl.所有化合物);
AnalyzerContext AnalyzerContexten=新AnalyzerContext(acEn);
布尔导数=真;
Lemmatizer enLemmatizer=new net.sf.jhunlang.jmorph.lemma.LemmatizerImpl(对映异构体、enStripDerivates、AnalyzerContexten);
//经过一些复杂的初始化之后,我们开始了
列表引理=enLemmatizer.lemmatize(“工作”);
for(引理引理:引理){
System.out.println(引理.getWord());
}

porter stemmer的一个很好的网站是