1

おしゃべりボットの作成を支援するために、Python で syntaxnet のパーサー タグ (例: VBD ROOT、NN nsubj など) を使用したいと考えています。入力はコンソールで行います。

質問: VBP ROOT のみの結果を変数に入れるにはどうすればよいですか? この呼び出しで解析ツリーの ASCII バージョンを出力できましたsubprocess.call(["echo 'Bob brought the pizza to Alice.' | syntaxnet/demo.sh"], shell =True)が、特定の変数を取得して Python 変数に格納する方法について少し混乱しています。

ps: 1 週間前に Python を学び始めました。

4

3 に答える 3

3

Python の初心者で、品詞 (POS) タグだけを使用したい場合、SyntaxNet はおそらくやり過ぎです。SpaCyは使いやすく、非常に正確です。

于 2016-07-08T21:35:37.337 に答える
3

私はPythonとSyntaxNetの両方の初心者でもあります。私がしたことは、SyntaxNetの出力をツリーから削除してタブ区切りのテキストファイルに変更したことです

  bazel-bin/syntaxnet/conll2tree \
  --task_context=$MODEL_DIR/context.pbtxt \
  --alsologtostderr

SyntaxNetフォルダーの demo.shから。このコマンド echo を実行します'open Book, which I have written with laboratory writer, with libreoffice writer.' | syntaxnet/demo.sh > output.txt

テキストファイルは次のようになります。

ここに画像の説明を入力

次に、 でデータを読み取りcsv.reader、 に変えてから、 (列番号は「0」から始まる) のlist列 4と列 7 を検索して見つけることができます。sublistsROOT

上記の説明のコードを入れます:

#read from Syntaxnet output tab delimited textfile
def readata(filename):
      file=open(filename,'r')
      lines=file.readlines()
      lines=lines[:-1]
      data=csv.reader(lines,delimiter='\t')
#make a list of lists
      lol=list(data)
      return  lol
#find the verb which is ROOT of the sentence
      lists=readata(filename)
      for sublist in lists:
            if sublist[7]=='ROOT' and sublist[4]=='VBP': 
                  word=sublist[1]

このコードはビッグナーによって書かれていることに注意してください。しかし、少なくとも私にとってはうまくいきました。

于 2016-07-13T18:33:48.370 に答える