Some German rules

Hi, there!

First of all, let me say that languagetool is a really great tool.
I have been playing a little with the rule editor and have developed some grammar rules for German. As I do not know where to post them, you can find them at the bottom of this post.

There is another remark which I would like to add: The English dictionary is missing the word ‘automata’ which is the plural of automaton. It is often used in CS and mathematics in the term ‘cellular automaton’ / ‘cellular automata’.

Here come my rules (also in an extra file: rule.xml (9.33 KB)):

<rule id="AUS_ZUM_TROTZ" name="Groß-/Kleinschreibung: 'zum Trotz' / 'aus Trotz'">    
 <pattern case_sensitive='yes'>
  <token regexp='yes'>[zZ]um|[aA]us</token>
  <marker>
  <token>trotz</token>
  </marker>
 </pattern>
 <message>In dieser Wendung wird <suggestion>Trotz</suggestion> als Substantiv großgeschrieben.</message>
 <short>&prgk;.</short>
 <example correction="Trotz">Aus <marker>trotz</marker> tat sie stets das Gegenteil von dem, was man ihr auftrug.</example>
 <example>Allen gut gemeinten Ratschlägen zum Trotz investierte er sein gesamtes Vermögen in das Unternehmen.</example>
</rule>



<rule id="GESETZT_DEN_FALL_II" name="Wendung: 'gesetzt den Fall'">    
 <pattern case_sensitive='yes'>
  <marker>
  <token regexp='yes'>[gG]esetz[t]</token>
  <token regexp='yes'>dem</token>
  </marker>
  <token>Fall</token>
 </pattern>
 <message>Meinten Sie die Wendung '<suggestion>gesetzt den</suggestion> Fall (dass...)' im Sinne von 'angenommen(, dass)'? In der Wendung 'gesetzt den Fall, dass' ist das Komma übrigens optional.</message>
 <example correction="Gesetzt den"><marker>Gesetzt dem</marker> Fall, dass der Antrag fristgerecht eingereicht wird, kann er bis Quartalsende bearbeitet werden.</example>
 <example>Gesetzt den Fall, alle Anwesenden stimmen für das Vorhaben, kann mit der Ausführung schon morgen begonnen werden.</example>
</rule>



<rule id="ESSEN_GEHEN" name="Groß-/Kleinschreibung: 'essen gehen'">    
  <antipattern>
    <token postag="SENT_START"/>
      <token>Essen</token>
      <token>gehen</token>
    </antipattern>
  <antipattern>
      <token postag="ADJ:.*|PA2:.*|PA1:.*" postag_regexp="yes"/>
      <token>Essen</token>
      <token>gehen</token>
  </antipattern>
  <antipattern>
      <token postag="ART:DEF:.*|PRO:DEM:.*" postag_regexp="yes" skip="1"/>
      <token>Essen</token>
      <token>gehen</token>
  </antipattern>
  <antipattern>
    <token regexp="yes">[dD]em|[eE]in(em)?|[dD]em|[mM]it|[Nn]ach|[vV]or|[zZ]um|[dD]urch|[Bb]ei[m]?|[Ii]n</token>
      <token>Essen</token>
      <token>gehen</token>
    </antipattern>
  <pattern case_sensitive='yes'>
     <marker>
     <token>Essen</token>
     </marker>
     <token>gehen</token>
  </pattern>
  <message>Meinten Sie <suggestion>essen gehen</suggestion>? In der Wendung 'essen gehen' sollte 'essen' kleingeschrieben werden.</message>
  <example correction="">Wir wollen <marker>Essen</marker> gehen.</example>
  <example correction="">Lass uns <marker>Essen</marker> gehen!</example>
  <example>Essen gehen kann ziemlich teuer werden.</example>
  <example>In Essen gehen wir auf jeden Fall zur Zeche Zollverein.</example>
  <example>Bevor wir heute essen gehen, musst du deine Hausaufgaben gemacht haben.</example>
  <example>Wollen wir mit deinen Eltern essen gehen.</example>
  <example>Beim heutigen Essen gehen wir die offenen Punkte durch.</example>
  <example>Dem schon vorbereiteten Essen gehen diverse Begrüßungsreden voraus.</example>
  <example>Dem schon bereitstehenden Essen gehen diverse Begrüßungsreden voraus.</example>
  <example>Dass essen gehen ein unerschwinglicher Luxus sein soll, bezweifle ich.</example>
  <example>Die Essen gehen auf mich!</example>
  <example>Diese beiden Essen gehen auf mich!</example>
</rule>
<rule id="A_LA_CARTE" name="Redewendung: à la carte">    
 <pattern>
  <marker>
  <token>a</token>
  <token>la</token>
  <token regexp='yes'>[CckK]art[e]</token>
  </marker>
 </pattern>
 <message>Meinten Sie die aus dem Französischen stammende Wendung '<suggestion>à la carte</suggestion>'?</message>
 <short>Redewendung: à la carte.</short>
 <example correction="à la carte">Wir essen heute <marker>a la carte</marker>.</example>
</rule>
<rule id="INKRAFTTRETEN" name="Zusammen-/Getrenntschreibung: 'Inkrafttreten'">    
 <pattern case_sensitive='yes'>
  <token regexp="yes">[dD]as|[eE]in(em)?|[dD]em|[mM]it|[Nn]ach|[vV]or|[zZ]um|[dD]urch|[Bb]ei[m]?</token>
  <marker>
  <token>in</token>
  <token>Kraft</token>
  <token>treten</token>
  </marker>
 </pattern>
 <message>&getrennt;. Das Substantiv wird groß- und zusammengeschrieben. Vorschlag: <suggestion>Inkrafttreten</suggestion>.</message>
 <short>&getrennt;.</short>
 <example correction="Inkrafttreten">Vor dem <marker>in Kraft treten</marker> des Vertrags müssen ihn beide Parlamente ratifizieren.</example>
 <example>Das Inkrafttreten der Vereinbarung ist an Bedingungen geknüpft.</example>
 <example>Bis zum Inkrafttreten vergeht noch ein Jahr.</example>
</rule>
<rule id="DURCHAUS" name="Zusammen-/Getrenntschreibung: 'durchaus'">    
 <pattern>
  <marker>
  <token regexp="yes">[dD]urch</token>
  <token>aus</token>
  </marker>
 </pattern>
 <message>Meinten Sie <suggestion>durchaus</suggestion>?</message>
 <short>&getrennt;.</short>
 <example correction="durchaus">Er ist <marker>durch aus</marker> lernfähig.</example>
 <example>Ein durchaus lustiges Theaterstück!</example>
</rule>
<rule>    
 <pattern case_sensitive='yes'>
 <token regexp='yes'>[iI]ch</token>
  <marker>
  <token regexp="yes">Band|Beichte|Beule|Binde|Bitte|Blase|Bräune|Breite|Bremse|Buche|Bürde|Bürste|Decke|Dichte|Dusche|Düse|Ecke|Ehre|Eiche|Eile|Erde|Falle|Falte|Feile|Flamme|Fliege|Fliese|Flöte|Folge|Frage|Fresse|Geige|Grenze|Hacke|Härte|Hecke|Heimfahrt|Höhle|Illustrierte|Kappe|Keule|Kippe|Klage|Klappe|Klaue|Klemme|Klinge|Klingel|Krähe|Kralle|Kürze|Lehre|Leine|Leiste|Leuchte|Liebe|Liege|Linse|Liste|Lüge|Menge|Messe|Miete|Nähe|Pauke|Pause|Perle|Pfeife|Presse|Probe|Pumpe|Puste|Quelle|Rede|Reibe|Reife|Reihe|Reise|Ritze|Robbe|Rolle|Rüge|Ruhe|Runde|Rutsche|Sage|Säge|Salbe|Scheide|Scheiße|Schere|Schiene|Schippe|Schlampe|Schleife|Schleuse|Schlinge|Schmelze|Schmiede|Schnalle|Schneide|Schule|Schürze|Schwäche|Schwärze|Schwebe|Schwelle|Sehne|Seife|Sonne|Sorge|Spalte|Speise|Spitze|Spritze|Stärke|Starre|Stelle|Stille|Stimme|Strafe|Strecke|Strippe|Stufe|Stütze|Suche|Summe|Taste|Tat|Taufe|Trage|Wache|Wärme|Weiche|Weide|Weihe|Weile|Weise|Wende|Wiege|Winde|Würde|Würze|Wüste|Zeche|Zwinge</token>
  </marker>
 </pattern>
 <message>Prüfen Sie die Groß- bzw. Kleinschreibung.</message>
 <short>Dieses Wort sollte kleingeschrieben werden.</short>
 <example correction=''>Ich <marker>Liebe</marker> dich.</example>
 <example correction=''>Während ich <marker>Rede</marker>, vergesse ich häufig Luft zu holen.</example>
 <example>Bevor ich dusche, blase ich noch Ostereier aus.</example>
 <example>Ich falle auf eure Streiche nicht mehr herein!</example>
 <example>Ich zwinge euch nicht!</example>
</rule>
<rule>    
 <pattern case_sensitive='yes'>
 <token regexp='yes'>[zZ]ur|[sS]eine[r]{0,1}|[iI]hre[r]{0,1}|[mM]{0,1}eine[r]{0,1}|[dD]eine[r]{0,1}|[eE]u[e]re[r]{0,1}|[uU]nsere[r]{0,1}</token>
  <marker>
  <token regexp="yes">abbitte|abfahrt|abfrage|abfuhr|abgeordnete|ablöse|abreise|absage|absteige|anfahrt|anfrage|angst|anklage|anreise|anrichte|ansage|anzeige|auffahrt|ausbeute|ausfahrt|ausfuhr|ausleihe|auslese|ausrede|ausreise|aussage|beichte|beule|binde|bitte|blase|bräune|bremse|buche|bürde|bürste|decke|durchfahrt|durchreiche|durchreise|durchsage|dürre|dusche|düse|ebbe|ecke|ehe|ehre|eiche|eile|einfahrt|einreise|erde|fahrt|falle|falte|feile|flamme|fliege|fliese|flöte|flucht|folge|frage|fresse|geige|gemeinde|gnade|grenze|großtat|hacke|halle|härte|hast|hecke|heimfahrt|herfahrt|hinfahrt|höhle|kante|kappe|keule|kippe|klage|klammer|klappe|klaue|klemme|klinge|klingel|kraft|krähe|kralle|kürze|kutsche|last|legende|lehre|leine|leiste|leuchte|liege|linse|liste|lüge|menge|messe|miete|mithilfe|mühe|nachfrage|nachlese|nachrede|nähe|naht|pauke|pause|perle|pfeife|pleite|post|predigt|presse|probe|pumpe|puste|quelle|rast|ratsche|rede|reibe|reihe|reise|reue|rille|ritze|robbe|rolle|rückfrage|rüge|ruhe|rutsche|sage|säge|sahne|salbe|säure|schanze|scharte|schau|scheide|scheiße|schere|schiene|schippe|schlampe|schleife|schleuse|schlinge|schmelze|schmiede|schnalle|schneide|schuld|schule|schürze|schwäche|schwärze|schwebe|schwelle|sehne|seife|sonne|sorge|spalte|sparte|speise|spritze|stärke|stelle|stimme|strafe|strecke|strippe|stufe|stunde|stütze|suche|summe|taste|taufe|trage|träne|uniform|vollmacht|voraussage|vorfahrt|vorhersage|vormacht|vorrede|vorsitzende|vorsorge|wacht|wand|wärme|weide|weihe|weile|welle|wende|werft|wiege|wiese|winde|wolle|wunde|würze|zahl|zeche|zeit|zier|zufahrt|zufuhr|zusage|zwinge</token>
  </marker>
 </pattern>
 <message>Prüfen Sie die Groß- bzw. Kleinschreibung.</message>
 <short>Dieses Wort sollte groß geschrieben werden.</short>
 <example correction=''>Er geht zur <marker>beichte</marker>.</example>
 <example correction=''>Dies geschah auf seine <marker>bitte</marker>.</example>
 <example>Nach seiner Beichte wurde ihm Absolution erteilt.</example>
 <example>Kann eure Auffahrt wieder benutzt werden?</example>
</rule>
<rule>    
 <pattern case_sensitive='yes'>
 <token regexp='yes'>[iI]ch|[eE][rs]|[sS]ie</token>
  <marker>
  <token regexp="yes">Band|Tat|Sucht|Würde|Macht|Haut</token>
  </marker>
 </pattern>
 <message>Prüfen Sie die Groß- bzw. Kleinschreibung.</message>
 <example correction=''>Er <marker>Tat</marker> nur so.</example>
 <example correction=''>Sie <marker>Haut</marker> ordentlich auf den Putz.</example>
 <example>Ich würde keine Sekunde zögern, dir zu helfen.</example>
 <example>Es macht mich traurig, euch so zu sehen.</example>
</rule>

Hi,

thanks for your rule contribution! I will add your rules in the next 2-3 days. Could you confirm it’s okay to add your rules under the terms of the GNU Lesser General Public License 2.1 or later?

I’ve also added “automaton” to English.

Regards
Daniel

Hi,

yes, it’s okay to add the rules under the terms of any GNU Lesser General Public License.

By the way, when checking my examples, I have found that ‘Die Essen’ (Die Essen gehen auf mich) produces a false alarm. This is, however, unrelated to my rule.

Bye!

Thanks again for the rules, I have committed them so they should become active today at around 23:00 CET on languagetool.org. They will also be part of tomorrow’s snapshot build at Index of /snapshots/

I did some minor changes, e.g. the regular expression “meine[r]{0,1}” can be written as “meiner?” and “case_sensitive=‘yes’” can be attached to a specific so the other tokens are case insensitive and don’t need to be written like “[iI]ch”.

More contributions would be very welcome!

Thank you for your hints. I will keep them in mind.

I have come up with two more rules, which you can find below.
There are two other remarks / questions:

  1. In the rulegroup MOEGLICHER_WEISE_ETC you might want to add “lustigerweise”

  2. How can one define fixed terms such as “coram publico” (= publicly)? I wanted to write a rule for this term as I have recently and repeatedly encountered the wrong term “coram publicum”.

    beide die|der|den, beide Meinten Sie 'beiden'? Die beide Turteltauben wollen bald heiraten. Welcher der beide Brüder hat den Unfall verursacht? Mein Vater, der die beide kennt, hat eine hohe Meinung von ihnen. Mein Vater, der beide kennt, hat eine hohe Meinung von ihnen. Die Hoffnung gibt den beiden Halt. Kennst du die beiden? Er hatte zwei Söhne, die beide Lehrer wurden. Die Tür, durch die beide passen, muss erst noch erfunden werden. Die Aufführung, in der beide Hauptfiguren am Ende sterben, wurde heftig kritisiert. wieso oft|häufig Meinten Sie 'wie so'? Die Mannschaft vergab den Sieg wieso oft in den letzten Spielminuten. Wieso häufig in den letzten Wochen kam er auch heute zu spät.

Thanks, I’ve extended MOEGLICHER_WEISE_ETC and added the rules. To have a phrase accepted by the spell checker you need to add something like this to disambiguation.xml:

<rule name="en vogue" id="EN_VOGUE">    
            <pattern>
                <marker>
                    <token>en</token>
                    <token>vogue</token>
                </marker>
            </pattern>
            <disambig action="ignore_spelling"/>
        </rule>

Eine der Groß-/Kleinschreibungs-Regeln musste ich entschärfen, weil sonst bei solchen Fällen ein Fehlalarm auftritt: “… für die ich Liebe und Zuneigung empfinde.” D.h. “Liebe” habe ich mal rausgenommen. Im Prinzip kann ähnliches vermutlich auch mit anderen Wörtern passieren.

@Knorr Danke für die vielen tollen Beiträge!

@Jan Schreiber: Danke für die Rückmeldung!
@dnaber: Sorry, da habe ich tatsächlich einige Fälle übersehen! (Nachdem ich Liebe gemacht habe,… Warum ich Liebe und Zärtlichkeit in meinen Büchern bespreche…)

Unten sind noch ein paar englische Stilregeln. Bin allerdings kein Muttersprachler!

<category name="Redundant Phrases" type="style">
  
<rule id="QUESTION_AS_TO_WHETHER" name="question as to whether ->     question whether">
        <pattern>
          <marker>
            <token>question</token>
            <token>as</token>
            <token>to</token>
            <token>whether</token>
          </marker>
        </pattern>
        <message>Consider simply using '<suggestion>question whether</suggestion>' (or 'question of whether') instead.</message>
        <url>http://genius.com/William-strunk-jr-the-elements-of-style-rule-17-annotated/</url>
        <example correction='question whether'>This raises the <marker>question as to whether</marker> his solution is correct.</example>
      </rule>



  
<rule id="OF_THE_FACT_THAT_1" name="regardless / in spite of the fact that ->     though / although">
      <antipattern>
          <token>this</token>
          <token regexp="yes" skip="1">is|was</token>
          <token regexp="yes">regardless|spite</token>
          <token>of</token>
          <token>the</token>
          <token>fact</token>
          <token>that</token>
      </antipattern>
        <pattern>
          <marker>
            <token max="1">in</token>
            <token regexp="yes">regardless|spite</token>
            <token>of</token>
            <token>the</token>
            <token>fact</token>
            <token>that</token>
          </marker>
        </pattern>
        <message>Consider simply using '<suggestion>though</suggestion>' (or 'although') instead.</message>
        <url>http://writing.wisc.edu/Handbook/CCS_wordyphrases.html</url>
        <example correction='Though'><marker>In spite of the fact that</marker> he worked very hard, he did not manage to pass the exam.</example>
      </rule>



  
<rule id="OF_THE_FACT_THAT_2" name="notwithstanding / despite the fact that ->     though / although">
      <antipattern>
          <token>this</token>
          <token regexp="yes" skip="1">is|was</token>
          <token regexp="yes">notwithstanding|despite</token>
          <token>the</token>
          <token>fact</token>
          <token>that</token>
      </antipattern>
        <pattern>
          <marker>
            <token regexp="yes">notwithstanding|despite</token>
            <token>the</token>
            <token>fact</token>
            <token>that</token>
          </marker>
        </pattern>
        <message>Consider simply using '<suggestion>though</suggestion>' (or 'although') instead.</message>
        <url>http://writing.wisc.edu/Handbook/CCS_wordyphrases.html</url>
        <example correction='Though'><marker>Despite the fact that</marker> he worked very hard, he did not manage to pass the exam.</example>
        <example correction='though'>Such compounds are widely used in industrial chemistry, <marker>despite the fact that</marker> they are often highly pyrophoric.</example>
      </rule>



  
<rule>    
        <pattern>
          <marker>
            <token>in</token>
            <token>the</token>
            <token>event</token>
            <token>that</token>
          </marker>
        </pattern>
        <message>Consider simply using '<suggestion>if</suggestion>' instead.</message>
        <url>http://writing.wisc.edu/Handbook/CCS_wordyphrases.html</url>
        <example correction='If'><marker>In the event that</marker> one of the systems is lost, the other can often regrow it.</example>
      </rule>


  
<rule>    
        <pattern>
          <marker>
            <token>if</token>
            <token>it</token>
            <token>should</token>
            <token regexp="yes">transpire|happen</token>
            <token>that</token>
          </marker>
        </pattern>
        <message>Consider simply using '<suggestion>if</suggestion>' instead.</message>
        <url>http://writing.wisc.edu/Handbook/CCS_wordyphrases.html</url>
        <example correction='If'><marker>If it should happen that</marker> one of the systems is lost, the other can often regrow it.</example>
      </rule>


  
<rule>    
        <pattern>
          <marker>
            <token>under</token>
            <token>circumstances</token>
            <token>in</token>
            <token>which</token>
          </marker>
        </pattern>
        <message>Consider simply using '<suggestion>if</suggestion>' instead.</message>
        <url>http://writing.wisc.edu/Handbook/CCS_wordyphrases.html</url>
        <example correction='If'><marker>Under circumstances in which</marker> one of the systems is lost, the other can often regrow it.</example>
      </rule>

Thanks for the English rules, I’ll add them after the next release (as we’re now in feature freeze), which is supposed to be around 2015-12-29.

Thank you for the update!

I have modified the WIE_SO_OFT-rule. Although I personally consider asking questions with “wieso” as not very elegant, it is correct. Therefore, I have added some exceptions:

<rule id="WIE_SO_OFT" name="Möglicher Tippfehler: 'wie so' ">    
    <antipattern>
        <token postag="SENT_START"/>
        <token>Wieso</token>
        <token regexp="yes" skip="-1">oft|häufig</token>
        <token postag="SENT_END">?</token>
    </antipattern>
    <pattern>
        <marker>
            <token>wieso<exception scope="previous">,</exception></token>
        </marker>
        <token regexp="yes">oft|häufig</token>
    </pattern>
    <message>Meinten Sie <suggestion>wie so</suggestion>?</message>
    <example correction="wie so">Die Mannschaft vergab den Sieg <marker>wieso</marker> oft in den letzten Spielminuten.</example>
    <example correction="Wie so"><marker>Wieso</marker> häufig in den letzten Wochen kam er auch heute zu spät.</example>
    <example>Dieser Artikel beantwortet die Frage, wieso häufig Raucher davon betroffen sind.</example>
    <example>Wieso oft Raucher davon betroffen sind? Keine Ahnung!</example>
</rule>

Your antipattern doesn’t seem to match the example sentence “Dieser Artikel beantwortet die Frage, wieso häufig Raucher davon betroffen sind.” There’s a script testrule.sh or testrule.bat (for Windows) in the LanguageTool stand-alone version that you can use to test your rules, i.e. run them on the example sentences.

That’s right! The antipattern is not intended to match “die Frage, wieso häufig”. The antipattern is only to match questions starting with “Wieso häufig|oft…”.
For the sentence “die Frage, wieso häufig” I have included an exception in wieso, in the actual pattern.

I did check the modified rule with the “rule editor” in expert mode and everything looked ok.

Anything else I can do?

Here is another [en]-rule:

<rule id="IS_SAFE" name="it is save (safe)">    
 <pattern>
  <token regexp="yes">was|is</token>
  <token min="0" max="1">it</token>
  <token min="0" max="1">not</token>
  <token min="0" max="1" regexp="yes">very|pretty</token>
  <marker>
   <token>save</token>
  </marker>
 </pattern>
 <message>Did you mean <suggestion>safe</suggestion>?</message>
 <example correction='safe'>It is not <marker>save</marker> to eat moldy food.</example>
 <example correction='safe'>It was not very <marker>save</marker> for him in this area.</example>
 <example correction='safe'>He claimed it was not very <marker>save</marker> to feed elephants.</example>
 <example>It is safe to say that he is a genius.</example>
 <example>Is it safe to go there at night?</example>
</rule>

Sorry, I missed the “” you added. I’ve committed your change now, thanks. I had to remove the “Keine Ahnung!” though, as more than one sentence in an example confuses the checking process.

No problem!

I have found that rule id=“EIN_KLEINES_NOMEN” triggers a false alaram for “Ein sieben Jahre alter Junge”, whereas “Ein acht Jahre alter Junge” passes the rule check.
This is because there is a exception for “wenige|sieben”.

[quote=“Knorr”]
I have found that rule id=“EIN_KLEINES_NOMEN” triggers a false alaram for “Ein sieben Jahre alter Junge”, [/quote]

I’ve fixed that.