From c898993e5bf2f9baa867ffcc09cd3495bb4f4de9 Mon Sep 17 00:00:00 2001 From: AzadehSafakish Date: Thu, 29 Feb 2024 16:31:19 +0100 Subject: [PATCH 1/2] [en] improve EN_A_VS_AN --- .../src/main/java/org/languagetool/rules/en/AvsAnRule.java | 5 +++++ .../src/main/resources/org/languagetool/rules/en/det_a.txt | 1 + .../test/java/org/languagetool/rules/en/AvsAnRuleTest.java | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/AvsAnRule.java b/languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/AvsAnRule.java index 37d5416d46c1..a8a249245ee7 100644 --- a/languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/AvsAnRule.java +++ b/languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/AvsAnRule.java @@ -95,6 +95,11 @@ public RuleMatch[] match(AnalyzedSentence sentence) { } if (equalsA || equalsAn) { Determiner determiner = getCorrectDeterminerFor(token); + if (token.getToken().equals("EUR") && i < tokens.length - 1) { + determiner = getCorrectDeterminerFor(tokens[i + 1]); + } else if (token.getToken().equals("EUR") && i == tokens.length - 1) { + determiner = Determiner.A; + } String msg = null; if (equalsA && determiner == Determiner.AN) { String replacement = StringTools.startsWithUppercase(prevTokenStr) ? "An" : "an"; diff --git a/languagetool-language-modules/en/src/main/resources/org/languagetool/rules/en/det_a.txt b/languagetool-language-modules/en/src/main/resources/org/languagetool/rules/en/det_a.txt index 09ae28c4db5b..8851af6672ff 100644 --- a/languagetool-language-modules/en/src/main/resources/org/languagetool/rules/en/det_a.txt +++ b/languagetool-language-modules/en/src/main/resources/org/languagetool/rules/en/det_a.txt @@ -3,6 +3,7 @@ # line starts with '*'). # Add words that allow both 'a' and 'an' to det_a.txt and det_an.txt. # Also see: http://www.learnenglish.org.uk/grammar/archive/articles_pronunciation.html +100 Eucharistic eukaryote eukaryotic diff --git a/languagetool-language-modules/en/src/test/java/org/languagetool/rules/en/AvsAnRuleTest.java b/languagetool-language-modules/en/src/test/java/org/languagetool/rules/en/AvsAnRuleTest.java index 411e1349bebc..0f1e7bdbdf24 100644 --- a/languagetool-language-modules/en/src/test/java/org/languagetool/rules/en/AvsAnRuleTest.java +++ b/languagetool-language-modules/en/src/test/java/org/languagetool/rules/en/AvsAnRuleTest.java @@ -44,6 +44,8 @@ public void setUp() throws IOException { public void testRule() throws IOException { // correct sentences: + assertCorrect("The company has also entered into a EUR 100 million ($88 million) debt"); + assertCorrect("The company has also entered into an EUR 80 million debt"); assertCorrect("Import an Xcode project."); assertCorrect("This is a oncer."); assertCorrect("She was a Oaxacan chef."); @@ -73,6 +75,8 @@ public void testRule() throws IOException { assertCorrect("He also wrote the comic strips Abbie an' Slats."); // errors: + assertIncorrect("The company has also entered into an EUR 100 million ($88 million) debt"); + assertIncorrect("The company has also entered into a EUR 80 million debt"); assertIncorrect("It was a hour ago."); assertIncorrect("It was an sentence that's long."); assertIncorrect("It was a uninteresting talk."); From d9f2c17e7e2f35855cecf85cb9ebca14cbccedc5 Mon Sep 17 00:00:00 2001 From: AzadehSafakish Date: Mon, 4 Mar 2024 12:08:46 +0100 Subject: [PATCH 2/2] [en] add comments/test cases --- .../main/java/org/languagetool/rules/en/AvsAnRule.java | 9 ++++++++- .../java/org/languagetool/rules/en/AvsAnRuleTest.java | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/AvsAnRule.java b/languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/AvsAnRule.java index a8a249245ee7..644e7d2ddada 100644 --- a/languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/AvsAnRule.java +++ b/languagetool-language-modules/en/src/main/java/org/languagetool/rules/en/AvsAnRule.java @@ -95,8 +95,15 @@ public RuleMatch[] match(AnalyzedSentence sentence) { } if (equalsA || equalsAn) { Determiner determiner = getCorrectDeterminerFor(token); + // if token is "EUR", look at the following word to establish the correct determiner, e.g. "an EUR 80 million debt" if (token.getToken().equals("EUR") && i < tokens.length - 1) { - determiner = getCorrectDeterminerFor(tokens[i + 1]); + if (tokens[i + 1].hasPosTag("PCT")) { + determiner = Determiner.A; + } + else { + determiner = getCorrectDeterminerFor(tokens[i + 1]); + } + // if token is "EUR" and no other word follows it (sentence-final), use "a" } else if (token.getToken().equals("EUR") && i == tokens.length - 1) { determiner = Determiner.A; } diff --git a/languagetool-language-modules/en/src/test/java/org/languagetool/rules/en/AvsAnRuleTest.java b/languagetool-language-modules/en/src/test/java/org/languagetool/rules/en/AvsAnRuleTest.java index 0f1e7bdbdf24..5164f26e7e7c 100644 --- a/languagetool-language-modules/en/src/test/java/org/languagetool/rules/en/AvsAnRuleTest.java +++ b/languagetool-language-modules/en/src/test/java/org/languagetool/rules/en/AvsAnRuleTest.java @@ -46,6 +46,8 @@ public void testRule() throws IOException { // correct sentences: assertCorrect("The company has also entered into a EUR 100 million ($88 million) debt"); assertCorrect("The company has also entered into an EUR 80 million debt"); + assertCorrect("It costs a EUR"); + assertCorrect("It costs a EUR."); assertCorrect("Import an Xcode project."); assertCorrect("This is a oncer."); assertCorrect("She was a Oaxacan chef."); @@ -77,6 +79,8 @@ public void testRule() throws IOException { // errors: assertIncorrect("The company has also entered into an EUR 100 million ($88 million) debt"); assertIncorrect("The company has also entered into a EUR 80 million debt"); + assertIncorrect("It costs an EUR"); + assertIncorrect("It costs an EUR."); assertIncorrect("It was a hour ago."); assertIncorrect("It was an sentence that's long."); assertIncorrect("It was a uninteresting talk.");