Betrachten Sie die folgenden Sätze. Offensichtlich besteht zwischen Artikel und Nomen einer Nominalphrase Kongruenz im Genus. Nutzen Sie Merkmalstrukturen in einem Python-Skript zur Überprüfung dieser Kongruenz. Ihr Skript sollte alle untenstehenden Beispiele korrekt als grammatisch/ungrammatisch klassifizieren können.
In [1]:
from nltk import FeatStruct
from sklearn.metrics import accuracy_score
from itertools import product
test_cases = product(
["der", "die", "das"], ["Löffel", "Gabel", "Messer"]
)
truth = [
True, False, False,
False, True, False,
False, False, True
]
In [2]:
pred = []
for nomPhr in test_cases:
# Baseline: Alles ist grammatisch!
pred.append(True)
In [3]:
print("Acc: {}".format(accuracy_score(truth, pred)))
Implementieren Sie die Merkmalstrukturen, die auf dem Übungsblatt angeben sind, als nltk.FeatStruct
und schreiben Sie ein Programm, das für einen gegebenen Satz die richtige Merkmalstruktur aus dem Lexikon auswählt und die Lücken für Subjekt und Objekt des Satzes füllt. Geben Sie anschlie\ss end die vollständige Merkmalstruktur auf der Standardausgabe aus.
Anmerkung: Sie dürfen annehmen, dass wir es nur mit sehr einfachen Sätzen zu tun haben, in denen das Token direkt vor dem Verb dem Subjekt und das Token direkt danach dem Objekt entspricht.
Testen Sie Ihr Programm mit den folgenden Sätzen:
In [4]:
sentences = [
"@ARTEde folgt Dir jetzt!",
"Das überraschte mich doch sehr!",
"Wer folgt wem auf Twitter?",
"John überraschte Jane mit einer richtigen Antwort."
]
In [ ]:
lexicon = {
# feature structures go here
}
In [5]:
# In: sentence as a string
# Out: semantic feature structure
def semantic_parse(sentence):
pass
In [6]:
for sent in sentences:
fs = semantic_parse(sent)
print()
print(sent)
print(fs)