2016-05-22 9 views
2

私はスタンフォードCoreNLP OpenIE注釈者に関する質問があります。スタンフォードCoreNLP OpenIE注釈者

私は、OpenIEを使用して関係を抽出するために、スタンフォードCoreNLPバージョンスタンフォードコアnlp-full-2015-12-09を使用しています。私は多くのJavaを知らないので、Python 3.4用にpycorenlpラッパーを使用しています。

私は文のすべての単語の間の関係を抽出したい、私は以下のコードを使用します。私はまた、各トリプレットの自信を示すに興味を持っています:

import nltk 
from pycorenlp import * 
import collections 
nlp=StanfordCoreNLP("http://localhost:9000/") 
s="Twenty percent electric motors are pulled from an assembly line" 
output = nlp.annotate(s, properties={"annotators":"tokenize,ssplit,pos,depparse,natlog,openie", 
           "outputFormat": "json","triple.strict":"true"}) 
result = [output["sentences"][0]["openie"] for item in output] 
print(result) 
for i in result: 
for rel in i: 
    relationSent=rel['relation'],rel['subject'],rel['object'] 
    print(relationSent) 

これは私が得た結果である:

[[{'relationSpan': [4, 6], 'subject': 'Twenty percent electric motors', 'objectSpan': [8, 10], 'relation': 'are pulled from', 'object': 'assembly line', 'subjectSpan': [0, 4]}, {'relationSpan': [4, 6], 'subject': 'percent electric motors', 'objectSpan': [8, 10], 'relation': 'are pulled from', 'object': 'assembly line', 'subjectSpan': [1, 4]}, {'relationSpan': [4, 5], 'subject': 'Twenty percent electric motors', 'objectSpan': [5, 6], 'relation': 'are', 'object': 'pulled', 'subjectSpan': [0, 4]}, {'relationSpan': [4, 5], 'subject': 'percent electric motors', 'objectSpan': [5, 6], 'relation': 'are', 'object': 'pulled', 'subjectSpan': [1, 4]}]] 

そしてトリプレットは、次のとおりです。

('are pulled from', 'Twenty percent electric motors', 'assembly line') 
('are pulled from', 'percent electric motors', 'assembly line') 
('are', 'Twenty percent electric motors', 'pulled') 
('are', 'percent electric motors', 'pulled') 

最初の問題は、ということです結果に自信がない。私は何を取得していますがトリプレットの複数の組み合わせがある

('are pulled from', 'Twenty percent electric motors', 'assembly line') 

:第二の問題は、私はそれだけでは、このトリプレットすなわち文のすべての単語が含まれてトリプレットを取得したいということです。私はオプション ""triple.strict":"true""を使用しようとしました。なぜなら "フラグメント全体を消費する場合にのみトリプルを抽出"しますが、それは機能しません。

誰もがこれについて私に助言できますか?

答えて

3

この設定を試してみてください:

"openie.triple.strict":"true" 

それは自信が戻っJSONで保存されていないこの時点で表示されたコードを見ると、あなたがCoreNLPサーバーからそれを得ることができないようにします。

これを作成したので、出力jsonにそれらを追加し、GitHubにライブされていることを通知します。

+0

'openie .triple.strict = true'は、セグメンタがフラグメントのすべてのコンポーネントをセグメント化していることを認識します。あなたは 'max_entailments_per_clause = 1'と' splitter.disable = true'を設定する運が増えると思っています。 –

+1

StanfordNLPHelp jsonのサーバーからの信頼回復が修正されたかどうか教えてください。ありがとう –

2

おかげで多く、それは今働いている私は両方を追加しました: "openie.triple.strict": "真" と "openie.max_entailments_per_clause": "1" のコード今は次のとおりです。

output = nlp.annotate(chunkz, properties={"annotators":"tokenize,ssplit,pos,depparse,natlog,openie", 
           "outputFormat": "json", 
           "openie.triple.strict":"true", 
           "openie.max_entailments_per_clause":"1"}) 
+0

ねえ、私はあなたが提案した 'splitter.disable = true'を追加すべきだったと思います。また、どのようにして自信スコアを得ることができますか? –

関連する問題