Login
Newsletter
Werbung

Do, 18. Oktober 2012, 15:00

LanguageTool-Tutorial – Teil I: Einfache XML-Regeln

Von gulp21

Gottfried Wilhelm Leibni(t)z?

LanguageTool ist auch beim Thema »Falschschreibung prominenter Eigennamen« behilflich. Es soll nun eine Regel entwickelt werden, die erkennt, wenn Herr Gottfried Wilhelm Leibniz (nicht mit ähnlich lautenden Namen zu verwechseln) fälschlicherweise mit t geschrieben wird. Eine solche Regel könnte so aussehen:

<rule id="GOTTFRIED_WILHELM_LEIBNIZ" name="Eigenname: 'Leibnitz (Leibniz)'">
    <pattern>
        <token>Gottfried</token>
        <token>Wilhelm</token>
        <marker>
            <token>Leibnitz</token>
        </marker>
    </pattern>
    <message>Meinten Sie den Philosophen <suggestion>Leibniz</suggestion>?</message>
    <short>&eigenname;</short>
    <example type="correct">Gottfried Wilhelm <marker>Leibniz</marker></example>
    <example type="incorrect" correction="Leibniz">Gottfried Wilhelm <marker>Leibnitz</marker></example>
</rule>

Der Code enthält noch keine Besonderheiten: &eigenname; steht kurz für einen »Möglicherweise falsch geschriebener Eigennamen.« und der für das als falsch angestrichene »Leibnitz« erhält man als Korrekturvorschlag »Leibniz«.

Es wäre jetzt aber auch schön, wenn Falschschreibungen von Ausdrücken, die vom Namen abgeleitet sind (z.B. »Leibnitzsches Gesetz«), erkannt werden.

Für die Erkennung der Falschschreibung ist der reguläre Ausdruck Leibnitzsche[ns]? geeignet. Die ersten Zeilen der Regel sehen also so aus:

<rule id="LEIBNIZSCHES" name="Eigenname: 'Leibnitzsches (Leibnizsches)' etc.">
    <pattern>
        <token regexp="yes">Leibnitzsche[ns]?</token>
    </pattern>

Bei der Meldung wird es jetzt aber etwas komplizierter. Wie schon bei der »französischen Revolution« ist das match-Element notwendig, um an den Text des Tokens zu kommen.

Nun ist aber keine Änderung der Groß- und Kleinschreibung verlangt, sondern das Ersetzen von Buchstaben. Dafür gibt es die Attribute regexp_match und regexp_replace, mit deren Hilfe jedes Vorkommen von »Leibnitz« im ersten Token durch »Leibniz« ersetzt werden kann, d.h. das »t« wird entfernt:

    <message>Meinten Sie <suggestion><match no="1" regexp_match="Leibnitz" regexp_replace="Leibniz"/></suggestion> (nach dem Philosophen Leibniz)?</message>

Insgesamt sieht die Regel mit Beispielsätzen und kurzer Fehlermeldung so aus:

<rule id="LEIBNIZSCHES" name="Eigenname: 'Leibnitzsches (Leibnizsches)' etc.">
    <pattern>
        <token regexp="yes">Leibnitzsche[ns]?</token>
    </pattern>
    <message>Meinten Sie <suggestion><match no="1" regexp_match="Leibnitz" regexp_replace="Leibniz"/></suggestion> (nach dem Philosophen Leibniz)?</message>
    <short>&eigenname;</short>
    <example type="correct">Das <marker>Leibnizsche</marker> Gesetz</example>
    <example type="incorrect" correction="Leibnizsche">Das <marker>Leibnitzsche</marker> Gesetz</example>
</rule>

Jetzt wäre es aber etwas übertrieben, wenn im Konfigurationsdialog von LanguageTool alle Regeln, bei denen es um die Falschschreibung von »Leibniz« geht, angezeigt werden würden. (Das würde den ohnehin nicht so übersichtlichen Dialog noch unübersichtlicher machen.) Deshalb gibt es die Möglichkeit, mehrere Regeln zu einer Regelgruppe (rulegroup) zusammenzufassen, was dann so aussehen kann:

<rulegroup id="GOTTFRIED_WILHELM_LEIBNIZ" name="Eigenname: 'Leibnitz (Leibniz)'">
    <rule>
        <pattern>
            <token regexp="yes">Leibnitzsche[ns]?</token>
        </pattern>
        <message>Meinten Sie <suggestion><match no="1" regexp_match="Leibnitz" regexp_replace="Leibniz"/></suggestion> (nach dem Philosophen Leibniz)?</message>
        <short>&eigenname;</short>
        <example type="correct">Das <marker>Leibnizsche</marker> Gesetz</example>
        <example type="incorrect">Das <marker>Leibnitzsche</marker> Gesetz</example>
    </rule>
    <rule>
        <pattern>
            <token>Gottfried</token>
            <token>Wilhelm</token>
            <marker>
                <token>Leibnitz</token>
            </marker>
        </pattern>
        <message>Meinten Sie den Philosophen <suggestion>Leibniz</suggestion>?</message>
        <short>&eigenname;</short>
        <example type="correct">Gottfried Wilhelm <marker>Leibniz</marker></example>
        <example type="incorrect" correction="Leibniz">Gottfried Wilhelm <marker>Leibnitz</marker></example>
    </rule>
</rulegroup>

Regel-ID und -Name wandern also zu dem übergeordneten rulegroup-Element.

Zusammenfassung und Ausblick

Hier ist noch einmal eine Zusammenfassung von allen Elementen, die in Teil I erklärt wurden:

  • Elemente rule und rulegroup, Attribute id und name
  • Element pattern, Attribut case_sensitive="yes", Unterelemente marker und token, Attribut regexp="yes"
  • Element message, Unterelemente suggestion und match, Attribute no, regexp_match und regexp_replace
  • Element url
  • Element example, Attribute type="incorrect", type="correct" und correction, Unterelement marker

Es wurde außerdem das Erstellen und Testen von Regeln mit Hilfe des Rule Creators und testrules.sh beschrieben. Weiterhin wurde die Verwendung von Entitäten vorgestellt.

Da das noch nicht alles ist, was LanguageTool kann, werden in Teil II, in dem dann auch mit POS-Tags gearbeitet wird, noch weitere Elemente vorgestellt.

Weitere Informationen zum Nach- und Weiterlesen gibt es auf der Development-Webseite von LanguageTool und im Wiki.

Autoreninformation

Markus Brenneis (Webseite) ist seit November 2011 LanguageTool-Entwickler und schreibt regelmäßig u.a. neue Regeln für die deutsche Grammatikprüfung.

Dieser Artikel ist in freiesMagazin 10/2012 (ISSN 1867-7991) erschienen. Veröffentlichung mit freundlicher Genehmigung.

  • Das Werk darf vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden, Abwandlungen und Bearbeitungen des Werkes müssen unter den gleichen Bedingungen weitergegeben werden. Der Name des Autors/Rechteinhabers muss in der von ihm festgelegten Weise genannt werden.

    - Weitere Informationen
Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung