Also als ein kleines Gedankenexperiment habe ich eine Funktion in Python programmiert, die spacy verwendet, um das Thema eines Nachrichtenartikels zu finden, und dann durch ein Nomen der Wahl zu ersetzen. Das Problem ist, dass es nicht gerade gut funktioniert, und ich hatte gehofft, es könnte verbessert werden. Ich verstehe SpaCy nicht so gut, und die Dokumentation ist ein bisschen schwer zu verstehen.Verwenden von spaCy, um das "Thema" eines Satzes zu ersetzen
Zuerst wird der Code:
doc=nlp(thetitle)
for text in doc:
#subject would be
if text.dep_ == "nsubj":
subject = text.orth_
#iobj for indirect object
if text.dep_ == "iobj":
indirect_object = text.orth_
#dobj for direct object
if text.dep_ == "dobj":
direct_object = text.orth_
try:
subject
except NameError:
if not thetitle: #if empty title
thetitle = "cat"
subject = "cat"
else: #if unknown subject
try: #do we have a direct object?
direct_object
except NameError:
try: #do we have an indirect object?
indirect_object
except NameError: #still no??
subject = random.choice(thetitle.split())
else:
subject = indirect_object
else:
subject = direct_object
else:
thecat = "cat" #do nothing here, everything went okay
newtitle = re.sub(r"\b%s\b" % subject, toreplace, thetitle)
if (newtitle == thetitle) : #if no replacement happened due to regex
newtitle = thetitle.replace(subject, toreplace)
return newtitle
die "Katze" Linien sind Füllstoff Linien, die nichts tun. "thetitle" ist eine Variable für einen zufälligen News-Artikel, den ich aus RSS-Feeds ziehe. "tereplace" ist die Variable, die die Zeichenfolge enthält, die das gefundene Subjekt ersetzen soll.
Nehmen wir ein Beispiel verwenden:
„Video-Spiele, die TV animiert werden sollten Zeigt - Bildschirm Rant“ Und hier ist der displaCy Zusammenbruch dass: https://demos.explosion.ai/displacy/?text=Video%20Games%20that%20Should%20Be%20Animated%20TV%20Shows%20-%20Screen%20Rant&model=en&cpu=1&cph=1
Das Wort der Code beendet zu ersetzen entschied sich für sein " das ", was in diesem Satz nicht einmal ein Substantiv ist, sondern anscheinend zu einem zufälligen Wortwahl-Fallback geführt hat, da es kein Subjekt, indirektes Objekt oder direktes Objekt finden konnte. Ich hoffe, dass es in diesem Beispiel eher "Videospiele" finden würde.
Ich sollte beachten, wenn ich das letzte Stück heraus nehme (das scheint, die Quelle für den Nachrichtenartikel zu sein) in Anzeige: https://demos.explosion.ai/displacy/?text=Video%20Games%20that%20Should%20Be%20Animated%20TV%20Shows&model=en&cpu=1&cph=1 es scheint, dass "das" das Thema ist, das falsch ist.
Was ist eine bessere Möglichkeit, dies zu analysieren? Soll ich zuerst nach Eigennamen suchen?
Dieser Versuch/ausgenommen Blöcke sehen nicht sehr Pythonic, was ist falsch mit der Initialisierung sie auf keine und dann überprüfen? –
Sie werden keine guten Ergebnisse für Satzfragmente sehen, Ihr Beispielsatz hat nicht einmal ein Prädikat. –
Re: die try/except Blöcke Ich habe dies von einem Codebeispiel abgeleitet, das ich für die Verwendung von SpaCy gefunden habe. Wäre ein Prädikat nicht schlecht? Gibt es einen besseren Weg, das Thema eines Satzfragments zu finden als mit SpaCy? – SpaceMouse