Archiv der Kategorie: Computerlinguistik

Porter Stemmer for German in Python

Anybody need a quick and dirty Python 2.5.2 implementation of the Porter German stemming algorithm?

I wrote one for the German S.L.U.T student project today: porterde.py

The only testing I did is running it on the complete list of examples on above page (pink background).

To use, import porterde as a module and call porterde.stem(word). The function requires and returns unicode strings.

Edit: I should have looked harder before jumping into this, there already is PyStemmer which does the same but for eight languages. Thanks to Mathieu for pointing that out.

Was man nicht sagt (2) – Wörter der Empörungsindustrie

Was bisher geschah: Was man nicht sagt

Als Sprachwissenschaftler muss ich meine Sprachkritik ja irgendwie verbrämen, damit ich mir nicht vorwerfen muss, ganz unwissenschaftlich den Leuten vorschreiben zu wollen, wie sie gefälligst nicht zu reden haben. Als Computerlinguist stehen mir da zusätzliche Summwörter zum Verbrämen zur Verfügung, stellen wir das Folgende also unter die Überschrift:

Bullshit Mining

Soll heißen: Sollte jemand einmal ein Programm entwickeln wollen, das Texte analysiert und die Stellen markiert, wo mit hoher Wahrscheinlichkeit Scheiße gelabert wird, könnte sich dieses unter anderem auf die Wortliste stützen, die ich in diesem und folgenden Beiträgen zusammenzutragen gedenke. Heute geht es um Wörter und Multiwörter, die in der Empörungsindustrie Verwendung finden – da, wo sich über abweichende Meinungen und Geschmäcker echauffiert wird, als handele es sich um Kapitalverbrechen.

„Dieser Film ist eine Schande für die gesamte französische Filmindustrie!“, sagte laut Max Goldt mal jemand über Die fabelhafte Welt der Amélie. Die Meinung allein verrät schon Hartherzigkeit, und dann erst die Ausdrucksweise! Wie schon bei meinen Ausführungen zu dem Wort Kinderschänder geoffenbart, habe ich für Wertesysteme, in denen die böse Tat eines Menschen unter dem Label „Schande“ an einem anderen Menschen klebenbleibt, nun ja… sehr wenig übrig. Ebenso wenig für sprachliche Relikte dieser Wertesysteme.

„Das ist geschmacklos!“ Das Wort Geschmack bezeichnet individuelle ästhetische Präferenzen, oder? In der daraus abzuleitenden Bedeutung „ästhetisch völlig indifferent“ wird geschmacklos aber nie verwendet, sondern im harmloseren Fall um für schlechter erachtete ästhetische Präferenzen abzuurteilen. Das kann ich noch akzeptieren, denn auch ich gebe mich lustvoll der Hybris hin, meinen Geschmack für besser als den vieler zu halten. Mit dem Wort geschmacklos gehe ich trotzdem sehr vorsichtig um, weil es Objektivität suggeriert, als gäbe es da eine gemeinhin akzeptierte Geschmackslehre, anhand derer sich alles testen ließe. Warum nicht das Kind bei einem subjektiven Namen nennen und hässlich sagen? Es muss schon um eine sehr spezielle Art von Hässlichkeit gehen, etwa die einer mit pinken und roten Kätzchen und Herzen gemusterten Tapete, bevor ich das Wort geschmacklos verwenden würde.

Das war jetzt aber nur Vorgeplänkel, denn es geht ja um die Empörungsindustrie. (Industrie, weil Gewinnabsicht: Zur Empörungsindustrie gehört jeder, der mit Empörung Wählerstimmen, Auflage oder Internetdiskussionen gewinnen will. Für den folgenden Punkt ist es nämlich wichtig, Internetforennutzer mithineindefiniert zu haben.) Die benutzt das Wort geschmacklos, wenn es um Witze und Vergleiche geht, die man nicht machen darf, weil man damit Empfindlichkeiten verletzt (hat immer irgendwas mit Hitler zu tun). Es geht dann also nicht um eine ästhetische, sondern um eine moralische Frage. Und da ist das Wort geschmacklos ob seiner Schwammigkeit noch viel weniger geeignet: Es ist eine Totschlagvokabel, die von der Suche nach dem wahren Problem ablenken soll – in vielen Fällen ist das wahre Problem nämlich Dummheit oder unangebrachte Dünnfelligkeit des Beleidigten.

„Das ist nicht witzig!“ Wird auf „geschmacklose“ (s.o.) Witze angewandt, als hätte die politische Korrektheit irgendeinen Einfluss auf die Witzigkeit. Wenn jemand einen anderen Humor hat oder bei heiklen Themen so leicht Klöße im Hals bekommt, dass das Lachen steckenbleibt, ist das was anderes. Bei allen anderen wird höchstens aus „Hahaha“ „Hohoho“ oder „Huhuhu“, aber das Zwerchfell spannt nicht minder.

Every big blue boxer

Have a glimpse at what the program I’m writing for my B.A. thesis in progress can do.

?- translate.

> Every big blue boxer that kills every big blue woman that is Mia loves a robber.

1 Jede große blaue Boxerin, die jede große blaue Frau, die Mia ist, tötet, liebt eine Räuberin.
2 Jede große blaue Boxerin, die jede große blaue Frau, die Mia ist, tötet, liebt einen Räuber.
3 Jeder große blaue Boxer, der jede große blaue Frau, die Mia ist, tötet, liebt eine Räuberin.
4 Jeder große blaue Boxer, der jede große blaue Frau, die Mia ist, tötet, liebt einen Räuber.

Yay! That is quite some syntactic complexity already, isn’t it? Never mind the crazy contents, I haven’t spent much time on the lexicon yet.

The main problem here is that none of the four offered sentences is a correct translation of the exquisitly gender-unaware English sentence. I actually spent most of the afternoon and evening on gendering issues only to find out that to achieve a satisfactory general solution, I’ll probably have to invest the better part of another day. What I would like for the above example is the following. It’s how I would express the state of affairs politically correctly.

Jede/r große blaue Boxer/in, der/die jede große blaue Frau,
die Mia ist, tötet, liebt eine/n Räuber/in.

Then of course there’s the blemish that the inner relative clause is not sufficiently extrapolated to sound nice. I’ll fix that too.

If you would like to stalk me at work and have access to my code repository, please let me know. Currently I can’t make it public like Aleks’s because I also store literature in there.

Translating with Semantic Representations

The beauty of the topic I’ve chosen for my B.A. thesis lies in the fact that it is about Machine Translation (MT), the prototypical application of Computational Linguistics (CL), relatively easy to explain yet incorporating many subdisciplines of CL. When I started studying CL three years ago, I told my grandparents about MT, now I can tell them I’m actually doing it.

Of course, what I’m doing compares to state-of-the-art MT systems like a lever does to a particle accelerator. My thesis will be about devising and implementing, in Prolog,  a program that translates a certain class of English sentences, like (1a), to correct and elegant German counterparts, like (1b). Crucially, in generating the German sentence, no other information about the English input will be used than the semantic first-order logical formulae, as in (2), derived from the input using BB1, the software accompanying Blackburn’s and Bos‘ textbook. (Since the English and the German sentence both carry the same ambiguity, both of them are associated with two logical formulae, (2a) and (2b)).

(1a) Every boxer loves a woman.
(1b) Jeder Boxer liebt eine Frau.

(2a) ∀x(boxer(x)→∃y(woman(y)∧love(x,y)))
(2b) ∃x(woman(x)∧∀y(boxer(y)→love(y,x)))

In other words, I use these simple logical formulae as an interlingua, leaving parsing and „understanding“ to (a possibly marginally extended version of) the existing system by Blackburn and Bos and focussing my efforts on generating German sentences. Nested quantification and negation, predicates best expressed as relative clauses, nouns, verbs or adjectives, and anaphoric expressions, among other things, will make this quite interesting.

Right now, I am concerned with defining my approach precisely and describing the place it has among other approaches from the literature. Today I collected dimensions along which Natural Language Generation (NLG) and MT systems can be positioned. I hope to post something about them tomorrow, before leaving for a break on the bicycle.

Here’s the title of my B.A. thesis: Problems of Generating German from Logical Formulae in Automatic Translation from English to German.

Zwischen den Blättern

Wenn Wörter die Blätter eines syntaktischen Baumes sind, wie heißen dann die Leerzeichen, Kommata etc. dazwischen, die nicht Teil des Baumes sind? Ich kenne keinen gebräuchlichen Begriff dafür, hätte aber gerne einen schön bildhaften Namen zur Verwendung in dem XSLT-Stylesheet, das ich gerade schreibe.

Befragen wir also die reale Welt. Was gibt es zwischen Blättern außer Luft? Ich habe mal nach „between leaves“ OR „between the leaves“ gegugelt. Aus den ersten beiden Trefferseiten lassen sich folgende Vorschläge für den gesuchten Begriff entnehmen:

  • sunshine
  • eating
  • lizard
  • fairy
  • thorns

Bingo, Volltreffer! Die thorns (Dornen) machen das Rennen. Linguisten aller Welt, schreibt euch das bitte auf eure Vokabelkärtchen.

Wörter wie connection, distinction, difference, interaction, correlation, exchange, link, to distribute usw., die between-Präpositionalphrasen als Argumente haben, sind natürlich schon in der Vorentscheidung aussortiert worden.

Mittwöchliche Einzeiler

Stellen Sie sich eine Sitcom vor, die in den Straßen und U-Bahn-Tunnels New Yorks spielt. Die Charaktere: JAP, Suit, Hobo, Hipster, Thug, Queer, Tourist und viele mehr. Das ist Overheard in New York, die vitalste und witzsprühendste mir bekannte Sprüchesammelseite. Dass sie zwanzigmal so viele Einträge hat und viel komischer ist als das Pendant für ganz Deutschland (immerhin zehnmal so viele Einwohner), liegt sicher nicht nur daran, dass New York viel dichter besiedelt ist und daher mehr Kontakt zwischen Sprücheklopfern und Spionen besteht.

Es liegt wahrscheinlich auch nicht allein an den states of mind der hochsexualisierten, der unfreundlichen, der hedonistischen, der plain crazy, der zynischen und der arroganten New Yorker, die zum Nährboden für vielfältige humoristische Topoi und Running Gags beitragen.

Nein, ich finde, die Qualität von OiNY besteht zu einem guten Teil auch aus dem redaktionellen Rahmen: Steht da ein mehrzeiliger Dialog mit einer Schlusspointe, wird in jedem Fall noch eine zweite Pointe draufgesetzt, und zwar immer in Form einer Überschrift, ob es nun ein Kommentar zum Dialog ist oder eine fiktive Fortsetzung. Das ist eine ganz schöne Leistung; sie lässt die Überschriften auf belauscht.de sehr brav und kläglich aussehen.

Es gibt Dialoge, bei denen es einem einfach die Sprache verschlägt. Das Finden einer lustigen Überschrift ist dann besonders schwierig und wird in Form eines Headline Contests an die Besucher weitergegeben. Die circa sieben besten Vorschläge werden dann veröffentlicht.

Sprüche, die jeweils nur in einer „einzeiligen“ Äußerung bestehen, werden aus irgendeinem Grunde mittwochs en gros veröffentlicht, und zwar thematisch gruppiert. Es gibt dann z.B. einen Eintrag für Hundesprüche, einen für Alkoholsprüche, einen für deviantes Sexualverhalten, einen für MySpace, einen für… you get the idea. Ich frage mich, ob die die Einzeiler per Hand aussortieren und gruppieren oder ob deren Server automatisch alle Einsendungen, die nur einen Doppelpunkt enthalten, tokenisiert, stemmt und mit Hilfe einer Ontologie einer Reihe von Begriffen zuordnet. Dann könnte die Redaktion jeden Mittwoch einfach gucken, welche Begriffe gerade genug Sprüche haben und daraus die Einträge basteln. Woher, wenn nicht von dieser Automatisierung, hätte sie die Zeit, sich für die Überschriften auch noch jeweils einen Satz zu dem Begriff zu überlegen, der das Wort Wednesday One-Liners enthält?

Wer jetzt OiNY-Leser werden will, dem sei dazu noch das Urban Dictionary ans Herz gelegt – ein Hilfsmittel, das einen bei Begriffen wie bimbette, get head oder sogar OiNY-Erfindungen wie wheelbo praktisch nie im Stich lässt.