3

スタンフォード パーサーのドキュメントには、次の例文が示されています。

インドで記録された史上最強の雨により、ムンバイの金融ハブが閉鎖され、通信回線が切断され、空港が閉鎖され、何千人もの人々が夜中にオフィスで寝たり、歩いて帰宅したりした.

これにより、解析ツリーが生成されます。

[ROOT [S [S [NP [NP [DT ザ]] [JJS 最強] [NN レイン]] [VP [ADVP [今までの RB]] [VBN 収録][PP [IN イン] [NP [NNP インド]]] ] ] [VP [VP [VBD シャットダウン] [PRT [RP ダウン] ] [NP [NP [DT ザ] [JJ 金融] [NN ハブ] ] [PP [IN] [NP [NNP ムンバイ] ] ] ] [, ,] [VP [VBD スナップ] [NP [NN 通信] [NNS 回線] ] ] [, ,] [VP [VBD 閉鎖] [NP [NNS 空港] ] ] [CC および] [VP [VBD 強制] [NP [NP [NNS 千人] ] [PP [IN of] [NP [NNS 人] ] ] [S [VP [TO to] [VP [VP [VB sleep]] [PP [IN in] [NP [PRP] $ their] [NNS office] ] ] ] [CC or] [VP [VB walk] [NP [NN home] ] [PP [IN during] [NP [DT the] [NN night] ] ] ] ] ] ] ] [, ,] [NP [NNS 職員] ] [VP [VBD 発言] [NP-TMP [今日の NN] ]] [. .] ] ]

( http://i.imgur.com/mZLBDmh.pngを参照)。

上記の複雑な文の例から文の主語と目的語を出力できるのは、どのような NLP ツールですか? 望ましい出力:

sentence_subj_phrase = "the strongest rain ever recorded in India"
sentence_obj_phrase = "the financial hub of Mumbai"

FROM ORIGINAL OP's POST (これは、彼が機能しないと考えていることの詳細です):

文中の主語と目的語を抽出する単純な方法は、動詞の直前と直後の名詞句を見つけることです。ただし、複雑な文では複数の動詞が存在するため、複数の主語と目的語が存在します。このような複雑な文を複数の文 (独立節の最初の部分を「根」として使用し、2 番目の部分を従属節のそれぞれに置き換える) と見なすことは可能ですが、通常は最初の節が最も重要であり、文の主要な「トピック」と見なすことができます。

単純な BFS を実行して動詞の前の最初の NP を見つけると、「役人」が主語になるという結果になります。これは、主語を含む最初の節の直感を捉えていません。私が試したアプローチの 1 つは、最初の「ベース」S ノード (つまり、S ノードをルートとする最下位レベルのサブツリー) で NP を検索することでしたが、この場合は S 3をルートとするノードをキャプチャします。

4

3 に答える 3

4

トピックと文法上の主語の概念をある程度混同しているようです。"officials" は "said" の完璧な文法上の主語です。あなたが説明しているように、文の主語ではなく、句の主語 (ツリー内の「S」サブツリー) を見つけることを考える必要があります。「最強の雨...」は、あなたの例では S_2 の文法上の主語です。

文中の任意の句の最初の文法上の主語だけが必要な場合は、選択したアルゴリズム (S->NP VP サブツリーの NP など) を使用して、すべての S サブツリーのすべての主語を見つけてから、1 つを選択します。それはツリー全体で最も左にあります。(ただし、これは必ずしも良いトピックであるフレーズを見つけるとは限りません。)

于 2013-09-27T09:07:32.090 に答える
3

注意すべきいくつかの点は、文法上の主語と目的語について話すとき、それらはほとんどの NLP タスクが準拠している言語学の構造主義理論に従っているということです。

次に、文法上の主語と目的語について話すときは、実体 (つまり、物/出来事) 自体のみを参照し、実体修飾子を除外する必要があります: 「インドでこれまでに記録された最強の雨」

entity = "rain"
entity modifiers = [('Adjective/Preposition_Phrase', "ever recorded in India"), ("Determiners", "the"), (Adjective_Phrase, "strongest")]
entity phrase = "The strongest rain"
entity phrase with all posssible modifiers (EP_mod)= "the strongest rain ever recorded in India"

次に、どのように を検出するかという NLP タスクに行き着きますEP_mod

  1. まず、複雑な文の主な述語 (つまり、浅い計算文法の動詞) を決定するアルゴリズムを見つけ出すことができます。(構文解析ツリーの最上位階層で動詞を見つけることをお勧めします)

  2. 次に、主述語のSUBJ/OBJ エンティティを含む句を見つける必要があります。(通常の NLP パーサーはこれを教えてくれるはずです)

  3. 最後に、主述語の SUBJ/OBJ エンティティを含むフレーズの修飾子を見つけるSUBJ_phrase governs Modifier_phrase必要があります (おそらく、依存関係パーサー (スタンフォード パーサーは依存関係パーサー) を見つけて、次のような注釈を提供する必要があります) 。

あなたが求めているのは、現在の既存のツールの寄せ集めであるため、最善の解決策は、独自のドッグフードソリューションを食べることです。それを楽しんでください=)

于 2013-09-28T16:09:47.847 に答える
1

Python Spacy メソッドは次のとおりです。

コード

from spacy.en import English
nlp = English()


SUBJECTS = ["nsubj","nsubjpass"] ## add or delete more as you wish
OBJECTS = ["dobj", "pobj", "dobj"] ## add or delete more as you wish


sent = "The strongest rain ever recorded in India shut down the financial hub of Mumbai, snapped communication lines, closed airports and forced thousands of people to sleep in their offices or walk home during the night, officials said today."

doc=nlp(sent)
sub_toks = [tok for tok in doc if (tok.dep_ in SUBJECTS) ]
obj_toks = [tok for tok in doc if (tok.dep_ in OBJECTS) ]

print("Subjects:", sub_toks)
print("Objects :", obj_toks)

結果

Subjects: [rain, officials]
Objects : [India, hub, Mumbai, lines, thousands, people, offices, night]
于 2016-12-17T19:46:17.240 に答える