2016-11-06 68 views
1

我已经使用了斯坦福NLP,但由于其更严格的许可条款(虽然它被称为GPL,它只能用于非盈利项目),但我正在评估Apache Open NLP。Apache open NLP POS不正确标记

我尝试了一个基本的示例测试,发现在开放NLP中语音部分标记不正确。 对于例如:像“加载”这样的词,“加载”被标记为NN,因为它们实际上是动词。

有人遇到过这个问题吗?我检查打开NLP的字典,我发现标记为NN

示例代码

InputStream inputStream = getClass().getResourceAsStream("/opennlp/en-pos-maxent.bin"); 
     System.out.println(" inputStream " + inputStream); 

     POSModel posModel = null; 
     try { 
      posModel = new POSModel(inputStream); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     POSTaggerME posTaggerME = new POSTaggerME(posModel); 

     String whitespaceTokenizerLine[] = WhitespaceTokenizer.INSTANCE.tokenize("Chair damaged during loading:"); 

     String[] tags = posTaggerME.tag(whitespaceTokenizerLine); 


     IntStream.range(0, tags.length).forEach(i -> System.out.println(" POS " + tags[i])); 
+0

你是如何测试这些词的?作为单独的字符串即使通过部分字符串,即使斯坦福大学的NLP也会犯错误。 –

+0

我已经按照文档 – lives

+0

中的建议以字符串数组形式传递了吗?您可以分享您的代码吗?你在使用1.5.x还是1.6? –

回答

-1

这可能是一些动词,因为OpenNLP没有100%的保证accuracy.Because它使用的预测方法。它预测了特征的结果。这意味着pos标签。它看起来应该被检测到的单词附近的pos标签的关系。所以所有的预测都取决于你的训练数据集。对于一个好的训练数据集,你需要在你的训练数据集中有15,000行。没有其他选择。 您正在使用经过Apache开发人员培训的预先训练过的模型测试您的句子。因此,您的数据和数据可能与用于训练预先训练的模型的结果不匹配。所以我建议你用你的数据来训练一个新的模型,这会增加预测的可能性。

注意:请参阅文档以了解如何培训新模型。它很好地解释。