2016-06-26 10 views
1

Ich möchte die Parser-Tags (ex: VBD ROOT, NN nsubj usw.) von Syntaxnet in Python verwenden, um einen Chatterbot zu erstellen. Die Eingabe erfolgt in der Konsole.Verwenden von Syntaxnet POS-Tags in Python?

Frage: Wie kann ich in einer Variablen das Ergebnis von nur VBP ROOT und sonst nichts bekommen? Ich war in der Lage, die ASCII-Version des Parse-Baumes mit diesem Aufruf zu drucken: subprocess.call(["echo 'Bob brought the pizza to Alice.' | syntaxnet/demo.sh"], shell =True), aber ich bin ein bisschen verwirrt, wie man zu einer bestimmten Variable gelangt und sie in einer Python-Variablen speichert.

p.s: Ich habe vor einer Woche angefangen, Python zu lernen.

Antwort

2

Wenn Sie ein Python-Anfänger sind und alles, was Sie verwenden möchten, sind die Wortart (POS) -Tags, SyntaxNet ist wahrscheinlich übertrieben. SpaCy ist einfach zu bedienen und ziemlich genau.

3

Ich bin auch ein Anfänger sowohl in Python und SyntaxNet. Was ich tat, war, dass ich die Ausgabe von SyntaxNet von Baum zu einer Tabulator getrennte Textdatei durch das Löschen geändert

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

von demo.sh in SyntaxNet Ordnern. Führen Sie diesen Befehl echo 'open Book, which I have written with laboratory writer, with libreoffice writer.' | syntaxnet/demo.sh > output.txt

Die Textdatei ist wie folgt:

enter image description here

Dann können Sie Daten mit csv.reader lesen, schalten Sie ihn auf list und dann suchen Spalte 4 von sublists (Spaltennummern beginnt von ' 0') und Spalte 7 für die Suche nach ROOT

ich habe den Code der obigen Erläuterung:

#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] 

Beachten Sie, dass dieser Code von einem bignner geschrieben wurde, aber es funktioniert zumindest für mich.