Natural Language Generation mit Java

Eine der natürlichsten Arten für uns Menschen zu kommunizieren ist die Sprache. Weshalb sie alle, die auch mit weniger natürlicher Sprache zu tun haben (also insbesondere Linguisten und im Speziellen Computerlinguisten), gerne auch „natürliche Sprache“ nennen. Die Generierung natürlicher Sprache („Natural Language Generation“ – NLG) ist ein relativ junges und momentan sehr beliebtes Forschungsfeld.

Egal ob in Form von „Roboter-Journalismus“, oder im Zusammenspiel mit Sprachsynthese bei Siri, Cortana und Co., NLG ist gerade ein großes Thema. Grund genug hier eine wirklich geniale, weil einfache, Java-Library für die Generierung natürlicher Sprache vorzustellen, Simplenlg. Simplenlg wurde an der University of Aberdeen entwickelt und wurde unter der Mozilla Public License (MPL) veröffentlicht. Neben der originalen, englischen, Version gibt es inzwischen auch einen deutschen und einen französischen Ableger, die ich selbst allerdings noch nicht getestet habe.

Auf der Seite gibt es ein Wiki mit ausführlichen Tutorials, weshalb ich an dieser Stelle nur mit einem kleinen Beispiel zeigen möchte, wie einfach NLG mit Simplenlg funktioniert:

Lexicon lexicon = Lexicon.getDefaultLexicon();
NLGFactory nlgFactory = new NLGFactory(lexicon);
Realiser realiser = new Realiser(lexicon);

SPhraseSpec p = nlgFactory.createClause();
p.setSubject("I");
p.setVerb("be");
p.setObject("happy");

String output = realiser.realiseSentence(p);

Der Output dieses Codeschnipsels ist: „I am happy.“. Ersetzt man das Subjekt durch „you“ und lässt alles andere unverändert, so ist der Output „You are happy.“. Fügt man vor der Realisierung noch diese Zeile hinzu:

p.setFeature(Feature.TENSE, Tense.PAST);

Wird der output „I was happy.“ sein. Auf diese Weise lassen sich schnell und einfach kleine NLG-Systeme bauen. Und da Simplenlg auch komplexe Satzkonstruktionen mit mehreren Nebensätzen verarbeiten kann, lassen sich selbst komplexe Strukturen, mit dem entsprechenden linguistischen Wissen, relativ einfach umsetzen.

Kommentieren