采用Stanford CoreNLP实现英文单词词形还原

最近有个小的任务,根据英文单词的过去分词或现在分词或复数形式获取词语的原形,本来我的思路是:对于不规则变化的词语,建立不规则词表,直接从词表中查询;对于规则的词形变化,自己写规则进行还原。后来发现有些变化涉及到单词的发音,如重读闭音节要双写最后一个单词再变化,这样逆推的话就不好处理,从网上查询获取单词音标也没有实现好的结果。于是从网上搜索资料发现了Stanford CoreNLP这个工具。此工具是基于Java开发的开源工具,可以在自己的项目中直接使用。下载地址是:http://nlp.stanford.edu/software/corenlp.shtml。现在后解压文件,将ejml-0.19-nogui.jar,joda-time.jar,jollyday.jar,stanford-corenlp-3.2.0.jar,stanford-corenlp-3.2.0-models.jar,xom.jar放于自己的项目下。代码片段为:

			  Properties props = new Properties();
			  props.put("annotators", "tokenize,ssplit,pos, lemma");
			  StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
			  Annotation document = new Annotation(txtWord);
			  pipeline.annotate(document);
			  List<CoreMap> sentences = document.get(SentencesAnnotation.class);
			  for(CoreMap sentence: sentences) {
				 for (CoreLabel token: sentence.get(TokensAnnotation.class)) {
				      String word = token.get(TextAnnotation.class);
				      String lema = token.get(LemmaAnnotation.class);
				      logger.info(word+","+lema);
				      originWord = lema;
				      originFlag = true;
				    }
				  }

其中 txtWord是待处理的文本,

props.put("annotators", "tokenize,ssplit,pos, lemma");

分别是分词、分句、词性标注和次元信息。

String word = token.get(TextAnnotation.class);

获取单词信息

String lema = token.get(LemmaAnnotation.class);

获取对应上面word的词元信息,即我所需要的词形还原后的单词。

你可能感兴趣的:(采用Stanford CoreNLP实现英文单词词形还原)