构建词性标签器(POS Tagger)

时间:2011-08-17 06:47:42

标签: java nlp pos-tagger

我需要用Java构建一个POS标记器,并且需要知道如何开始。是否有代码示例或其他资源来帮助说明POS标记器的工作原理?

3 个答案:

答案 0 :(得分:5)

试试Apache OpenNLP。它包括一个POS Tagger工具。您可以从here下载即用型英语模型。

该文档提供了有关如何从Java应用程序中使用它的详细信息。基本上你需要以下内容:

加载POS模型

InputStream modelIn = null;

try {
  modelIn = new FileInputStream("en-pos-maxent.bin");
  POSModel model = new POSModel(modelIn);
}
catch (IOException e) {
  // Model loading failed, handle the error
  e.printStackTrace();
}
finally {
  if (modelIn != null) {
    try {
      modelIn.close();
    }
    catch (IOException e) {
    }
  }
}

实例化POS标记器

POSTaggerME tagger = new POSTaggerME(model);

执行

String sent[] = new String[]{"Most", "large", "cities", "in", "the", "US", "had", "morning", "and", "afternoon", "newspapers", "."};          
String tags[] = tagger.tag(sent);

请注意,POS标记符需要一个标记化的句子。 Apache OpenNLP还提供了帮助完成这些任务的工具和模型。

如果您需要训练自己的模型,请参阅此documentation

答案 1 :(得分:4)

您可以检查现有的标记器实现。

例如参考Java中的斯坦福大学POS标签(由Kristina Toutanova提供),它可以在GNU通用公共许可证(v2或更高版本)下获得,源代码编写得很好,并且有明确的文档记录:

http://nlp.stanford.edu/software/tagger.shtml

关于标记的好书是: 言语和语言处理(第2版),Daniel Jurafsky,James H. Martin

答案 2 :(得分:1)

有一些广泛使用的POS / NER标记符。

OpenNLP Maxent POS标记:使用Apache OpenNLP。

Open NLP是Apache强大的java NLP库。它为NLP提供了各种工具,其中一个是Part-Of-Speech(POS)标记器。通常使用POS标记符来查找文本中的结构语法结构,使用标记数据集,其中每个单词(短语的一部分)都使用标签进行标记,您可以从此数据集构建NLP模型,然后使用新文本使用该模型为文本中的每个单词生成标签。

示例代码:

public void doTagging(POSModel model, String input) {
    input = input.trim();
    POSTaggerME tagger = new POSTaggerME(model);
    Sequence[] sequences = tagger.topKSequences(input.split(" "));
    for (Sequence s : sequences) {
        List<String> tags = s.getOutcomes();
        System.out.println(Arrays.asList(input.split(" ")) +" =>" + tags);
    }
}

详细博客,其中包含有关如何使用它的完整代码:

https://dataturks.com/blog/opennlp-pos-tagger-training-java-example.php?s=so

基于NER标记的Stanford CoreNLP:

斯坦福核心NLP是迄今为止经过实战考验的NLP库。在某种程度上,它是当今NLP性能的黄金标准。在各种其他功能中,库中支持命名实体识别(NER),这允许在一段文本中标记重要实体,如人名,地点等。

示例代码:

public void doTagging(CRFClassifier model, String input) {
  input = input.trim();
  System.out.println(input + "=>"  +  model.classifyToString(input));
}  

详细博客,其中包含有关如何使用它的完整代码:

https://dataturks.com/blog/stanford-core-nlp-ner-training-java-example.php?s=so