Python OpenNLP Wrapper - Tokenizer在\ n停止

时间:2016-05-12 07:59:19

标签: python nlp opennlp

我(在OS X上工作)有关于这个用于python的OpenNLP包装器的问题:https://github.com/rohithb/openNLP-python-wrapper

出于某种原因,使用此包装器,Sentence Detector无法正常工作。我很好,只是切换到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')

正如你所看到的,在最后一个" else"声明,我使用\ 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 ._.'

任何想法为什么会发生这种情况或可能的解决方案是什么?谢谢!

1 个答案:

答案 0 :(得分:2)

  

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

来自OpenNLP docs

  

解析器期望一个空格标记句子。

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

要解析每个句子,不要连接,只需循环执行。