Я читаю некоторые текстовые файлы в программе Java и хотел бы заменить некоторые символы Unicode на ASCII-приближения. Эти файлы в конечном итоге будут разбиты на предложения, которые подаются в OpenNLP. OpenNLP не распознает символы Юникода и дает неправильные результаты по ряду символов (он символизирует "девушку" как "девушку" и "с", но если она является котировкой Юникода, она рассматривается как один токен).
Например, исходное предложение может содержать направленную котировку Unicode U2018 ('), и я хотел бы преобразовать ее в U0027 ('). В конце концов я удалю оставшийся Unicode.
Я понимаю, что теряю информацию, и я знаю, что я могу писать регулярные выражения для преобразования каждого из этих символов, но я спрашиваю, есть ли код, который я могу повторно использовать для преобразования некоторых из этих символов.
Это то, что я мог, но я уверен, что сделаю ошибки/пропущу вещи/и т.д.:
// double quotation (")
replacements.add(new Replacement(Pattern.compile("[\u201c\u201d\u201e\u201f\u275d\u275e]"), "\""));
// single quotation (')
replacements.add(new Replacement(Pattern.compile("[\u2018\u2019\u201a\u201b\u275b\u275c]"), "'"));
replacements - это настраиваемый класс, который я позже запускаю и применяю замены.
for (Replacement replacement : replacements) {
text = replacement.pattern.matcher(text).replaceAll(r.replacement);
}
Как вы можете видеть, мне пришлось найти:
- ЛЕВАЯ ОДНОМЕСТНАЯ ЦЕНА КВАЛИФИКАЦИИ
- ПРАВОЕ ОДИНОЧНОЕ ЦЕЛЕВОЕ ЗНАЧЕНИЕ
- SINGLE LOW-9 QUOTATION MARK (что это/следует заменить?)
- SINGLE HIGH-REVERSED-9 QUOTATION MARK (что это/следует заменить?)