#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>