Как отфильтровать китайскую пунктуацию в Scala / Java?

2

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

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

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

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

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

Теги:

1 ответ

4
Лучший ответ

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

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

См. Демонстрацию Scala.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню