Übungsblatt 6

Präsenzaufgaben

Aufgabe 1     Kongruenz 1.0

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.

    • Der Löffel ist aus Silber.
    • &ast Der Gabel ist aus Silber.
    • &ast Der Messer ist aus Silber.
    • &ast Die Löffel ist aus Silber.
    • Die Gabel ist aus Silber.
    • &ast Die Messer ist aus Silber.
    • &ast Das Löffel ist aus Silber.
    • &ast Das Gabel ist aus Silber.
    • Das Messer ist aus Silber.

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)))


Acc: 0.3333333333333333

Aufgabe 2     Semantische Merkmalstrukturen

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)


@ARTEde folgt Dir jetzt!
None

Das überraschte mich doch sehr!
None

Wer folgt wem auf Twitter?
None

John überraschte Jane mit einer richtigen Antwort.
None