Wie finden Sie den kürzesten Abhängigkeit Pfad zwischen zwei Wörtern in Python?
Ich versuche zu finden, die die Abhängigkeit Pfad zwischen zwei Wörtern in Python gegebene Abhängigkeitsstruktur.
Für Satz
Robotern in der populären Kultur sind da, um zu erinnern uns an die awesomeness von
ungebundene menschliche Agentur.
Ich verwendet practnlptools ( https://github.com/biplab-iitb/practNLPTools ), um die dependency parsing-Ergebnis:
nsubj(are-5, Robots-1)
xsubj(remind-8, Robots-1)
amod(culture-4, popular-3)
prep_in(Robots-1, culture-4)
root(ROOT-0, are-5)
advmod(are-5, there-6)
aux(remind-8, to-7)
xcomp(are-5, remind-8)
dobj(remind-8, us-9)
det(awesomeness-12, the-11)
prep_of(remind-8, awesomeness-12)
amod(agency-16, unbound-14)
amod(agency-16, human-15)
prep_of(awesomeness-12, agency-16)
kann auch dargestellt werden als (Bild entnommen aus https://demos.explosion.ai/displacy/)
Die Länge der Strecke zwischen dem "Roboter" und "sind" ist 1, die Länge der Strecke zwischen dem "Roboter" und "awesomeness" wäre 4.
Meine Frage ist oben angegeben Abhängigkeit parse-Ergebnis, wie bekomme ich die Abhängigkeit Weg oder Abhängigkeit von der Pfadlänge zwischen zwei Wörtern?
Aus meiner aktuellen such-Ergebnis, würde nltk ist ParentedTree helfen?
Dank!
- Hi @Sean, Wie kann ich eine ähnliche Struktur für den Satz mit nltk? Ich derzeit haben keine Grammatik, und mit dem "baumbank" Grammatik, gibt mir Fehler, einige Worte nicht in Produktion Liste. Danke.
- Acutally, mit NLTK bekommen, wie eine schöne Präsentation ist hart. Ich schlage vor, mit Spacig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem kann leicht gedacht werden, als ein graph-problem, wo wir haben, um den kürzesten Pfad zwischen zwei Knoten.
Konvertieren Ihre Abhängigkeit von den Parsen in einem Diagramm, müssen wir zunächst mit der Tatsache auseinandersetzen, dass es darum geht, wie ein string. Sie wollen um dieses zu erhalten:
wie folgt Aussehen:
Diese Weise können Sie füttern die Tupel-Liste ein graph Konstruktor von der networkx - Modul, analysieren Sie die Liste und erstellen Sie ein Diagramm für Sie, plus geben Sie eine saubere Methode, die gibt Ihnen die Länge des kürzesten Weges zwischen zwei gegebenen Knoten.
Notwendigen Importe
So kommen Sie zu Ihrem string in den gewünschten Tupel-Liste format
, Wie das Diagramm
Wie die Berechnung des kürzesten Pfades der Länge
Dieses Skript wird zeigen, dass der kürzeste Weg angesichts der Abhängigkeit analysieren ist tatsächlich der Länge 2, da ist man von
Robots-1
zuawesomeness-12
durchremind-8
Wenn Sie nicht wie dieses Ergebnis, möchten Sie vielleicht denken über das filtern bestimmter Abhängigkeiten, in diesem Fall nicht möglich, die
xsubj
Abhängigkeit Hinzugefügt werden, um den graph.HugoMailhot ist Antwort ist groß. Ich werde schreiben, etwas ähnliches für spacig Benutzer, die wollen, finden die kürzesten Abhängigkeit Pfad zwischen zwei Wörtern (in der Erwägung, dass HugoMailhot s Antwort stützt sich auf practNLPTools).
Dem Satz:
hat die folgende dependency tree:
Hier ist der code zu finden, der kürzeste Abhängigkeit Pfad zwischen zwei Wörtern:
Ausgabe:
Installieren spacig und networkx:
Einige benchmarks bezüglich spacy ' s dependency parsing: https://spacy.io/docs/api/
Diese Antwort stützt sich auf Stanford CoreNLP zu erhalten, die Abhängigkeit Struktur eines Satzes. Es borgt sich einiges an code aus HugoMailhot ist Antwort bei der Verwendung von networkx.
Bevor den code ausgeführt wird, muss man:
sudo pip install pycorenlp
(python-Schnittstelle für Stanford CoreNLP)Starten Stanford CoreNLP-server wie folgt:
Dann kann man den folgenden code ausführen, um zu finden, die kürzeste Abhängigkeit Pfad zwischen zwei Wörtern:
Ausgabe:
Beachten Sie, dass Stanford CoreNLP kann online getestet werden: http://nlp.stanford.edu:8080/parser/index.jsp
Dieser Antwort wurde getestet mit der Stanford CoreNLP 3.6.0., pycorenlp 0.3.0 und python 3.5 x64 auf Windows 7 SP1 x64 Ultimate.