OpenNLP 初步

OpenNLP是一个比较成熟的 NLP 工具,包括 tokenizer、sentence detection、POS tagging(perceptron 或者 MaxEnt)、NER(named entity recognition,包括时间、地点、人名、钱、组织等)、chunker、parser 和 coreference 的工具。一般来说可以直接使用 opennlp 训练好的 model 以及提供的命令行工具完成一些基本的问题,比如下面的例子:

$ apache-opennlp-1.5.1-incubating/bin/opennlp TokenNameFinder en-ner-person.bin > test.txt
Loading Token Name Finder model ... done (1.998s)
HOUSTON -- A voter who went to the polls Thursday at an early-voting location south of the Texas
Medical Center served as this mid-term election's reminder to keep your politically-themed
clothing at home."This is ridiculous," <START:person> Tamika Francis <END> told 11 News as she
stood outside the Fiesta grocery store at Main and Kirby where she had just been denied the
right to vote."That's not going to roll with me. Is it going to roll with you?" she asked her
mom who had travelled to the polling location with her. KHOU 11 News Houston

Average: 8.0 sent/s
Total: 1 sent
Runtime: 0.125s

OpenNLP 的文档还比较详细,大部分内容都有 cover,但是功能比较有限,因为只提供了 MaxEnt 这种工具,能使用的 feature (unigram 的 feature)相对较少。我们也可以为 opennlp 准备一些语料用于训练,一般需要将语料弄成如 CONLL 等格式,然后通过 Converter 类型的命令转换成 OpenNLP 自己的格式,调用 Train 后就可以获得类似于前面使用的 bin 的 model 文件了。Evaulator 用于计算一些常用的 metrics 用于评估标注的准确性和召回率之类的东西。具体细节可以参看这里。下面摘录了一个 parser 的例子,这相当于利用提供的 java class 写一些自己需要的 native code,如果需要在 hadoop 上处理文本数据,这将是一个很不错的工具:

InputStream modelIn = new FileInputStream("en-parser-chunking.bin");
try {
  ParserModel model = new ParserModel(modelIn);
} catch (IOException e) {
  e.printStackTrace();
} finally {
  if (modelIn != null) {
    try {
      modelIn.close();
    } catch (IOException e) {
    }
  }
}
Parser parser = ParserFactory.create(model);
String sentence = "The quick brown fox jumps over the lazy dog .";
Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);

——————–
And with every living creature that is with you, of the fowl, of the cattle, and of every beast of the earth with you; from all that go out of the ark, to every beast of the earth.

Advertisements
OpenNLP 初步

dbpedia

不少自然语言处理的工具都会依赖现在最大的 wikipedia 数据集,这里罗列了一些有用的东西:

  • 一个 ontology
  • wikipedia 的标题
  • wikipedia 的摘要
  • wikipedia 的扩展图片
  • wikipedia 的图片地址数据(支持用 wiki ID 查询)
  • wikipedia 上地址对应的地理信息,包括经纬度
  • 地理信息的相关性(利用 ontology 组织)
  • 某些 wikipedia 上 entity 的主页
  • 某些人物的信息(生辰名讳介绍等等)
  • 文章类别
  • 文章的外部链接
  • wikipedia 页面之间的链接和 redirect 关系

数据的格式比较奇怪,搞了一种 ws 的办法 parse 数据 =.= 不知道结合这些数据和一些常用的 NLP 工具是不是能干点什么呢?像 Markov logic nets 那些东西好像很多时候也能用在文本的一些问题上的,要不抽空看几眼吧…

——————
And you, be you fruitful, and multiply; bring forth abundantly in the earth, and multiply therein.

dbpedia