Как отфильтровать китайскую пунктуацию в Scala / Java? - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь сделать независимый от языка парсер текста в Scala / Spark. Я использовал регулярные выражения для удаления пунктуации из больших групп текста.

list_of_strings.map(_.replaceAll("""[\p{Punct}]"""))

Тем не менее, я нашел ряд знаков препинания в китайском тексте, которые не были удалены. До сих пор я добавил [〝〞。,"] к своему регулярному выражению для этих персонажей. Обратите внимание, что многие из них похожи на латинские знаки препинания, но не совсем так.

Есть ли в Java регулярное выражение 'каноническая' функция, которая позволит мне убрать пунктуацию в других языках? Помимо китайского, я обеспокоен арабским языком.

Кроме того, я хочу убедиться, что разделительная пунктуация на одном языке не является критическим компонентом языка на другом. Я не знаком ни с китайским, ни с арабским языками, поэтому я ищу что-то, сделанное носителем языка.

1 Ответ

0 голосов
/ 11 сентября 2018

Вам не нужно добавлять все эти знаки препинания в Юникоде в класс символов. Сделайте \p{Punct} поддерживающий Юникод с помощью опции Pattern.UNICODE_CHARACTER_CLASS или эквивалентного (?U) встроенного флага:

.replaceAll("""(?U)\p{Punct}+""", "")
               ^^^^ 

См. Демо Scala .

+ после \p{Punct} удаляет последовательные знаки препинания - это куски, а не один за другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...