2016-05-12 23 views
0

我(在OS X上工作)对本OpenNLP包装为Python的一个问题:https://github.com/rohithb/openNLP-python-wrapperPython的OpenNLP包装 - 标记生成器停在 n

出于某种原因,句子检测器不能正常工作,使用这种包装。我对此感到满意,只需切换到由NLTK提供的句子检测器即可。当我将输出反馈回OpenNLP Tokenizer时,麻烦就开始了。下面是一些示例代码:

import opennlp 
import nltk 

token = opennlp.OpenNLP("/Users/sven/apache-opennlp-1.6.0", "TokenizerME", "en-token.bin") 
pos = opennlp.OpenNLP("/Users/sven/apache-opennlp-1.6.0", "POSTagger", "en-pos-maxent.bin") 

def pipeline(start_with, str): 
if start_with == "token": 
    return pos.parse(token.parse(str).decode('utf-8')).decode('utf-8') 
elif start_with == "pos": 
     return pos.parse(str).decode('utf-8') 
else: 
    str = '\n'.join(nltk.sent_tokenize(str)) 
    return pos.parse(token.parse(str).decode('utf-8')).decode('utf-8') 

正如你所看到的,在最后的“其他人”的声明,我Concat的使用\ n作为分隔符每个句子。我这样做是为了模拟OpenNLP Sentence Splitter的输出格式,如下所述:http://opennlp.apache.org/documentation/1.6.0/manual/opennlp.html#tools.sentdetect.detection

问题是,OpenNLP Tokenizer在第一句之后停止工作,并且只给出这个结果。例如:

teststr = ("This is a sentecene. And this is yet another one.") 
pipeline("",teststr) 

OUT:

'This_DT is_VBZ a_DT sentecene_NN ._.' 

任何想法,为什么发生这种情况或有什么可能的解决办法是什么?谢谢!

回答

2

任何想法,为什么发生这种情况

OpenNLP docs

解析器期望空白标记化的句子。

句子检测器的输出命令行工具是每行一句。语句检测器API的输出是一个字符串数组,每个字符串一个句子,这更加明智。

要解析每个句子,请不要连接,只是在循环中进行。

+1

正如@Amadan所说。解析器需要一个句子。因此,只需使用'nltk.sent_tokenize(str)'并遍历该列表即可。此外,包装器的实现是非常基本的。因此,仔细阅读代码并进行必要的更改。 – Rohith