Python OpenNLP Wrapper – Tokenizer 停止在 \n
Python OpenNLP Wrapper – Tokenizer stops at \n
我(在 OS X 上工作)对 python 的这个 OpenNLP 包装器有疑问:https://github.com/rohithb/openNLP-python-wrapper
出于某种原因,句子检测器无法使用此包装器。我对此没有意见,只是切换到 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)
输出:
'This_DT is_VBZ a_DT sentecene_NN ._.'
知道为什么会发生这种情况或可能的解决方案是什么吗?谢谢!
Any Idea why this happens
来自OpenNLP docs:
The parser expect a whitespace tokenized sentence.
句子检测器命令行工具的输出是每行一个句子。 sentence detectorAPI的输出是一个字符串数组,一个字符串一个句子,这样就合理多了。
要解析每个句子,不要连接,只需循环即可。
我(在 OS X 上工作)对 python 的这个 OpenNLP 包装器有疑问:https://github.com/rohithb/openNLP-python-wrapper
出于某种原因,句子检测器无法使用此包装器。我对此没有意见,只是切换到 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)
输出:
'This_DT is_VBZ a_DT sentecene_NN ._.'
知道为什么会发生这种情况或可能的解决方案是什么吗?谢谢!
Any Idea why this happens
来自OpenNLP docs:
The parser expect a whitespace tokenized sentence.
句子检测器命令行工具的输出是每行一个句子。 sentence detectorAPI的输出是一个字符串数组,一个字符串一个句子,这样就合理多了。
要解析每个句子,不要连接,只需循环即可。