Java 构建词性标记器(POS标记器)

Java 构建词性标记器(POS标记器),java,nlp,pos-tagger,Java,Nlp,Pos Tagger,我需要用Java构建一个POS标记器,并且需要知道如何开始。是否有代码示例或其他资源可以帮助说明POS标记器是如何工作的?您可以检查现有标记器的实现 例如,请参考斯坦福大学Java POS tagger(由Kristina Toutanova编写),它是在GNU通用公共许可证(v2或更高版本)下提供的,源代码编写良好,文档清晰: 阅读有关标签的好书是: 语音和语言处理(第二版)作者:丹尼尔·朱拉夫斯基,詹姆斯·马丁。它包括一个POS标记器工具。您可以从下载现成的英文模型 文档提供了有关如何从J

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

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

例如,请参考斯坦福大学Java POS tagger(由Kristina Toutanova编写),它是在GNU通用公共许可证(v2或更高版本)下提供的,源代码编写良好,文档清晰:

阅读有关标签的好书是: 语音和语言处理(第二版)作者:丹尼尔·朱拉夫斯基,詹姆斯·马丁。它包括一个POS标记器工具。您可以从下载现成的英文模型

文档提供了有关如何从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-tagger需要一个标记化的句子。ApacheOpenNLP还提供了帮助完成这些任务的工具和模型


如果您必须培训自己的型号,请参考此项。

有一些广泛使用的POS/NER标签

OpenNLP Maxent POS标记器:使用Apache OpenNLP。

OpenNLP是Apache提供的一个功能强大的JavaNLP库。它为NLP提供了各种工具,其中之一是词类(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);
    }
}
public void doTagging(CRFClassifier model, String input) {
  input = input.trim();
  System.out.println(input + "=>"  +  model.classifyToString(input));
}  
关于如何使用它的完整代码的详细博客:


nlp是一个难以解决的问题。你应该从寻找发表的关于你的问题的文章开始,选择一些建议的解决方案,实施它们,然后选择一个能给你带来更好结果的。嗯……你必须从头开始构建自己的解决方案吗?因为如果没有,你可以使用Andrey提到的Stanford或者WColen提到的OpenNLP。斯坦福是我的首选;非常好。如果你必须建立一个,那听起来像是一个家庭作业项目;否则真的没有理由做你自己的(没有理由我至少能想到lol)。创建POS标签是一项艰巨的任务。理想情况下,您将获得一个带注释的语料库,解析它,获得标记频率,获得可能性估计,平滑数据,然后构建模型。该模型可以仅基于现有的随机数据,使用logit或HMM之类的工具,也可以使用有监督的特征干预和依赖特征的Maxent或Perceptron模型。您还可以通过使用类似于Brille的基于规则的标记器来完全避免概率模型。鉴于斯坦福POS标记器的复杂(一次性)概率模型,我不确定它是否是一个好的开始实现。不过,朱拉夫斯基和马丁是一本值得一读的书。