languagetool-org / languagetool

Style and Grammar Checker for 25+ Languages
https://languagetool.org
GNU Lesser General Public License v2.1
12.2k stars 1.38k forks source link

[de] debugging DE_AGREEMENT (FPs, wrong suggestion, no suggestion) #5470

Open udomai opened 3 years ago

udomai commented 3 years ago

Die deutsche AgreementRule (src/main/java/org/languagetool/rules/de/AgreementRule.java) wird >100k-mal pro Woche geöffnet, aber nur in <47 % der Fälle angewendet. Hier können wir mit ein paar systematischen Fixes bestimmt viel bewegen.

False Positives

Falsche Suggestions

Keine Suggestion, obwohl eine möglich ist

Erkannte Fehlermuster

udomai commented 3 years ago

Aufgabe:

Kurze Notiz:

posRegex("…") entspricht dem XML <token postag="…" postag_regexp="yes"/> tokenRegex("…") entspricht dem XML <token regexp="yes">…</token> new PatternTokenBuilder().posRegex("PRP.*").min(0).build() entspricht dem XML <token min="0" postag="…" postag_regexp="yes"/> usw. usw., man kann sich an den anderen APs orientieren. cs steht für "case sensitive".

Wichtig: vor dem Committen testen per de\AgreementRuleTest.java UND per SentenceSourceChecker auf dem Nightly Regression Test Corpus (vorher/nachher, Diff)

udomai commented 3 years ago

Test auf dem Nightly Regression Test Corpus: (Auswirkung von 9c156e5a22070eaf492c6f17d01679815d227ad0, s.o.)

REM 22 Zeilen (3581 → 3559), davon

Targeted False Positives (FPs, gegen die das AP gebaut wurde): 14/22 - «Das Martinsbergquartier erhält mit der entstehenden Streuobstwiese einen neuen Lebensraumtyp, ein weiteres Vernetzungselement, das Wald und Siedlungsraum miteinander verbindet und von **dem Natur** und Mensch profitieren werden», schreibt die Stadt in einer Mitteilung. - Das sind nur ein paar Beispiele, bei denen sich dann wieder die Erfahrung eines DJs bemerkbar macht, die man nicht runterladen kann und **die gute DJs** auszechnet. - Den Text zu „Wir“ hat übrigens Fritz Rotter geschrieben, der in den 1930er Jahren vor den Nazis fliehen musste und **dem rechtes Gedankengut** absolut fern lag. - Des Weiteren sind im Obergeschoss Gästezimmer vorgesehen, die entsprechend der Geschichte des Hauses liebevoll eingerichtet werden und **die Raum** für Wohlbefinden und Rückzug bieten. - Diese und andere Kollegen verdienen unsere Anerkennung für das professionelle Engagement, mit dem sie arbeiten und dank **dem Bauten** Gestalt gewinnen, die zu Referenzbeispielen einer besseren Architektur werden. - Ein Spießbürger ist ein Mensch ohne Ideale, der sich nur um alltägliche, triviale Dinge kümmert und **den edle Ideen** nicht interessieren. - Verdeutlichen lässt sich dies an einer von allen Menschen getrennten, einzelnen und numerisch identischen Idee des Menschen, die für das jeweilige Menschsein ursächlich ist und **die Erkenntnisgegenstand** ist für die Frage ‚Was ist ein Mensch?‘. - Dabei kultiviert man sie in einem Gelnährmedium, das sich in einem einseitig geschlossenen Glasrohr (Reagenzglas, Kulturröhrchen) befindet und in **das Sauerstoff** nur vom oberen, offenen Ende durch Diffusion eindringen kann. - AutoCAD LT ist eine vereinfachte AutoCAD-Variante, mit der meist 2D-Zeichnungen erstellt werden und **die weniger Programmierschnittstellen** besitzt. - In der Glashütte Benediktbeuern, die er von 1807 bis 1819 leitete und in **der optische Geräte** produziert wurden, ist heute ein Fraunhofer-Museum. - Die beiden bekanntesten Carbonate sind Natriumcarbonat, Trivialname Soda, ein wichtiger Grundstoff für die Glasherstellung und Calciumcarbonat aus dem z. B. Muscheln, Schnecken ihre Schalen aufbauen und **das Steinkorallen** abscheiden. - Damit war es möglicherweise Teil eines Thrones, der älter als der Aachener Königsthron Karls des Großen ist und **der lange Zeit** als ältester Thron auf dem Gebiet des heutigen Deutschland galt. - Das Kreuz steht für den Deutschen Ritterorden, der in Marburg eine bedeutende Niederlassung hatte und **dem zahlreiche Ländereien** gehörten. - Eve Curie stellte eine Frau dar, die sich ganz der Wissenschaft gewidmet hatte und **der persönliche Niederlagen** nichts anhaben konnten.
Accidental False Positives (FPs, die nur zufällig entfernt werden): 4/22 - Da die Email Adresse unique ist (nur einmal im System vorhanden sein darf) musst Du die Bestellung einer neuen Lizenz unter einer anderen Email Adresse durchführen oder **die Email Adresse** Deines bestehenden Accounts abändern. - Was ist wahrscheinlicher das du hier wieder mal dein Unwissen über physikalische Vorgänge preisgibst oder **das Solarzellen** und Windrädern eine Seele haben? - Durch die Digitalisierung steht die IT zunehmend im Mittelpunkt jeder Unternehmensstrategie; die IT gewinnt also an Bedeutung, wird aber für **die meisten Business Units** (BU) so strategisch, dass sie die Hoheit über der IT zunehmend für sich beanspruchen. - Ein süß-saures Gericht der Kölner Küche sind der Rheinische Sauerbraten, welcher ursprünglich mit Pferdefleisch zubereitet wurde und **das einfachere Himmel** un Ääd, vermengtes Kartoffel- und Apfelmus, zu dem es gebratene Blutwurst („Flönz“) gibt.
True Positives: 4/22 - Zurücklehnen und **das großzügigen Platzangebot** für bis zu 8 Personen genießen, alleine oder in Gesellschaft eurer Lieben. - Nur, wenn die Befestigungslochabstände Ihres Bildschirms von dieser Wandhalterung unterstützt werden und **das Bildschirm** weniger als das maximale Belastungsgewicht der Wandhalterung wiegt, ist diese Halterung passend für Ihren Bildschirm. - Diese Spannung kann einen Brand einen Kunststoffisolator starten oder zu schmelzen, wenn nicht ordnungsgemäß installiert oder **die falsche Isolator** für den Job ausgewählt. - Dabei tat sich besonders die Firma Bing hervor, die den Sprung von der handwerklichen Fertigung (Schneiden, Löten, Bemalen) zur industriellen Fertigung (Lithographieren, Stanzen, Verlaschen) vollzog und durch **die kostengünstige Produkte** zum weltweit größten Spielwarenhersteller heranwuchs.

→ kann theoretisch auf 13 TFP, 0 AFP, 1 TP reduziert werden, wenn man das Antipattern erweitert:

      token(","),
      new PatternTokenBuilder().posRegex("PRP.*").min(0).build(),
      new PatternTokenBuilder().posRegex("ART:DEF.*").setSkip(-1).build(),
      posRegex("VER.*[123].*"),
      tokenRegex("und|oder|aber"),
      new PatternTokenBuilder().posRegex("PRP.*").min(0).build(),
      posRegex("ART:DEF.*")

Test des erweiterten AP auf dem Nightly Regression Test Corpus:

REM 12 Sätze (3581 → 3569), davon

Targeted False Positives (FPs, gegen die das AP gebaut wurde): 10/12 - «Das Martinsbergquartier erhält mit der entstehenden Streuobstwiese einen neuen Lebensraumtyp, ein weiteres Vernetzungselement, das Wald und Siedlungsraum miteinander verbindet und von **dem Natur** und Mensch profitieren werden», schreibt die Stadt in einer Mitteilung. - Das sind nur ein paar Beispiele, bei denen sich dann wieder die Erfahrung eines DJs bemerkbar macht, die man nicht runterladen kann und **die gute DJs** auszechnet. - Den Text zu „Wir“ hat übrigens Fritz Rotter geschrieben, der in den 1930er Jahren vor den Nazis fliehen musste und **dem rechtes Gedankengut** absolut fern lag. - Diese und andere Kollegen verdienen unsere Anerkennung für das professionelle Engagement, mit dem sie arbeiten und dank **dem Bauten** Gestalt gewinnen, die zu Referenzbeispielen einer besseren Architektur werden. - Ein Spießbürger ist ein Mensch ohne Ideale, der sich nur um alltägliche, triviale Dinge kümmert und **den edle Ideen** nicht interessieren. - Verdeutlichen lässt sich dies an einer von allen Menschen getrennten, einzelnen und numerisch identischen Idee des Menschen, die für das jeweilige Menschsein ursächlich ist und **die Erkenntnisgegenstand** ist für die Frage ‚Was ist ein Mensch?‘. - Dabei kultiviert man sie in einem Gelnährmedium, das sich in einem einseitig geschlossenen Glasrohr (Reagenzglas, Kulturröhrchen) befindet und in **das Sauerstoff** nur vom oberen, offenen Ende durch Diffusion eindringen kann. - In der Glashütte Benediktbeuern, die er von 1807 bis 1819 leitete und in **der optische Geräte** produziert wurden, ist heute ein Fraunhofer-Museum. - Damit war es möglicherweise Teil eines Thrones, der älter als der Aachener Königsthron Karls des Großen ist und **der lange Zeit** als ältester Thron auf dem Gebiet des heutigen Deutschland galt. - Das Kreuz steht für den Deutschen Ritterorden, der in Marburg eine bedeutende Niederlassung hatte und **dem zahlreiche Ländereien** gehörten.
Accidental False Positives (FPs, die nur zufällig entfernt werden): 1/12 - Als Leadagentur haben wir gemeinsam mit dem Kunden die Miles & More App zu einem vollwertigen digitalen Kanal zur Marke ausgebaut, der **das User Engagement** über mobile Touchpoints nachhaltig stärkt und das Angebot für die Mitglieder stetig verbessert.
True Positives: 1/12 - Das Instrument besitzt zwei Messkanäle: der Weitwinkel-Kanal („Wide Field“), der auf Kosten **des Auflösungsvermögen** ein besonders großes Blickfeld besitzt und der Planeten-Kanal („Planetary Camera“), der ein kleinere Blickfeld aufweist dafür aber die Auflösung des Hauptspiegels voll nutzen kann.

→ Das Antipattern erstmal so lassen, wie es nach dem obigen Commit ist, Statistiken im Auge behalten

udomai commented 3 years ago

The above before/after tests with a self-made diff take an hour each (2 x 30 mins to have the SentenceSourceChecker run DE_AGREEMENT over the entire de-DE regression test corpus).

@fabrichter, as a personal Christmas wish, I would love to be able to run the SentenceSourceChecker on a server and, as an extra, have a diff like the nightly between the "before" and "after" results... maybe @s-burst can help with a script?

This would facilitate work on DE_AGREEMENT and DE_AGREEMENT2 (as well as other java rules, presumably) massively. It can be done with the existing infrastructure, though – it's just that it's really slow.

udomai commented 3 years ago

Thanks to the new testing infrastructure created by @fabrichter, testing a new AP for DE_AGREEMENT was a breeze!

https://github.com/languagetool-org/languagetool/commit/df41d495a9f26229b3461ad261e17da30c16b701