2016-05-12 2 views
0

で停止のpythonのためにこのOpenNLPラッパーに関する問題があります。何らかの理由でhttps://github.com/rohithb/openNLP-python-wrapperPythonのOpenNLPラッパートークナイザは、私が(OS X上で作業) 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') 

は、最後の「他」の文の下に、私は区切り文字として\ nを使用して、各センテンスをCONCAT:ここではいくつかのサンプルコードです。私はこれをOpenNLP Sentence Splitterの出力フォーマットを模倣するためにここに記述しました:http://opennlp.apache.org/documentation/1.6.0/manual/opennlp.html#tools.sentdetect.detection

問題は、OpenNLPトークナイザは最初の文の後で動作を停止し、この結果だけを返します。例:

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から

をなぜ起こるすべてのアイデア:

パーサは空白トークン化の文章を期待しています。

文章検出器コマンドラインツールの出力は1行に1文です。文検出器APIの出力は文字列の配列であり、文字列ごとに1つの文があり、これははるかに賢明です。

各文章を解析するには、連結しないでループで実行します。

+1

@Amadanとまったく同じです。パーサは、単一の文が必要です。だから 'nltk.sent_tokenize(str)'を使い、そのリストを繰り返し処理してください。また、ラッパーの実装は本当に基本的です。だから、コードを読み、必要な変更を加えてください。 – Rohith

関連する問題