Я пытаюсь сделать агностический текстовый парсер языка в Scala/Spark. Я использовал регулярное выражение для удаления знаков препинания из больших групп текста.
list_of_strings.map(_.replaceAll("""[\p{Punct}]"""))
Тем не менее, я нахожу ряд знаков препинания в китайском тексте, которые не удаляются. До сих пор я добавил [〝〞。,"]
мое регулярное выражение для этих символов. Обратите внимание, что многие из них похожи на латинские знаки препинания, но не совсем то же самое.
Есть ли "каноническая" функция, встроенная в Java regex, которая позволит мне вырезать пунктуацию на других языках? Помимо китайского, я обеспокоен арабским.
Кроме того, я хочу убедиться, что разделение пунктуации на одном языке не является критическим языковым компонентом в другом. Я не знаком ни с китайским, ни с арабским языками, поэтому я ищу что-то готовое носителем языка.
Вам не нужно добавлять все символы символов пунктуации Unicode в класс символов. Сделайте \p{Punct}
Unicode-aware с помощью параметра Pattern.UNICODE_CHARACTER_CLASS
или эквивалентного (?U)
встроенного флага:
.replaceAll("""(?U)\p{Punct}+""", "")
^^^^
См. Демонстрацию Scala.
+
\p{Punct}
удаляет последовательные символы пунктуации - это фрагменты, а не один за другим.