package cn.edu.bjut.textmining.chapter2; import cn.edu.bjut.textmining.util.FileUtil; import opennlp.tools.lemmatizer.DictionaryLemmatizer; import java.io.File; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** 使用 OpenNLP 根据“词形 + 词性”查询词元。 */ public class OpenNlpLemmatizerDemo { public static void main(String[] args) { try { File dictionaryFile = FileUtil.path( "data", "chapter2", "en-lemmatizer.dict").toFile(); DictionaryLemmatizer lemmatizer = new DictionaryLemmatizer(dictionaryFile); Path sampleFile = FileUtil.path( "data", "chapter2", "lemmatization-samples.tsv"); List lines = FileUtil.readNonEmptyUtf8Lines(sampleFile); List tokenList = new ArrayList(); List tagList = new ArrayList(); for (String line : lines) { String[] parts = line.split("\\t"); if (parts.length != 2) { throw new IllegalArgumentException("词形还原样本格式错误:" + line); } tokenList.add(parts[0]); tagList.add(parts[1]); } String[] tokens = tokenList.toArray(new String[tokenList.size()]); String[] tags = tagList.toArray(new String[tagList.size()]); String[] lemmas = lemmatizer.lemmatize(tokens, tags); System.out.println("词形: " + Arrays.toString(tokens)); System.out.println("词性: " + Arrays.toString(tags)); System.out.println("词元: " + Arrays.toString(lemmas)); } catch (Exception e) { e.printStackTrace(); } } }