JLanguageTool не игнорирует цифры в словах

#java #numbers #tokenize #digits #languagetool

#java #числа #маркировать #цифры #languagetool

Вопрос:

Я использую JLanguageTool с немецким языком ( de-DE ) для проверки орфографии и заметил, что цифры, похоже, используются в качестве разделителя слов (точно так же, как пробелы?). Например We8lt , сообщается не как одно неверное слово, а как две ошибки в написании (одна для We и одна для lt ). Или, например bis8 , вообще не сообщается как ошибка.

Пример вызова (я использую его как библиотеку Java, но поведение такое же):

 $ echo "Hallo We8lt bis8 Test" | java -jar languagetool-commandline.jar -l de-DE -
Expected text language: German (Germany)
Working on STDIN...

1.) Line 1, column 7, Rule ID: GERMAN_SPELLER_RULE prio=-3
Message: Möglicher Tippfehler gefunden.
Suggestion: WE; Der; Den; Des; Dem
Hallo We8lt bis8 Test 
      ^^              

2.) Line 1, column 10, Rule ID: GERMAN_SPELLER_RULE prio=-3
Message: Möglicher Tippfehler gefunden.
Suggestion: LT; als; lag; a< elf
Hallo We8lt bis8 Test 
         ^^           

Time: 1618ms for 1 sentences (0.6 sentences/sec)
 

Это большая проблема, поскольку, например, отсутствующие пробелы между словами и цифрами не найдены. Как я могу заставить библиотеку / инструмент не обрабатывать числа как разделители слов? Большое спасибо.

Ответ №1:

Да, вы правы: LanguageTool обрабатывает числа как разделители слов на немецком языке.

Чтобы изменить это поведение, вы должны изменить исходный код и изменить эту строку в GermanSpellerRule.java от

 String pattern = "("   nonWordPattern.pattern()   "|(?<=[\d°])-|-(?=\d ))";
 

Для

 String pattern = ("("   nonWordPattern.pattern()   "|(?<=[\d°])-|-(?=\d ))").replace("{L}", "{L}\d");
 

Кроме того, вы можете добавить другое правило в grammar.xml который жалуется на пропущенные пробелы перед / после чисел:

 <rule id="RULE" name="rule">
<pattern>
    <token regexp="yes">[a-zäöüß] d [a-zäöüß]*</token>
</pattern>
<message>Fehlt hier ein Leerzeichen?</message>
<example correction=""><marker>P4sswort</marker>.</example>
 

Редактор правил