2016-03-01 2 views
2

Я пытаюсь уменьшить некоторую сложность онлайн-текста, удаляя не латинские символы + [!?., ]. Большинство персонажей может быть удалено без проблем, но для некоторых из них я хочу конкретные правила:Замена цитат на предложения

пара ( и ), пара " (кавычек) или пара * должна преобразовать любой текст внутри них предложение, если оно содержит более двух слов. Преобразуясь в предложение, я просто хочу добавить полную остановку в конце. Например:

but *after* I came up with it, I searched and... 

к

but after I came up with it, I searched and... 

Здесь я просто хочу, чтобы * удалены, в отличие от:

*buys airplane ticket* IM COMING FOR YOU 

в

buys airplane ticket. IM COMING FOR YOU 

Таким образом, в первом примере , автор simp В то же время автор подчеркивает слово, которое является частью этого предложения, во втором примере автор описывает действие, которое также может быть предложением самостоятельно. Это работает аналогично кавычкам, где одно слово обычно является своего рода акцентом или сарказмом, в то время как множественными являются цитаты.

Есть ли способ сделать это в regex (Java)?

EDIT: Таким образом, мой общий подход требует 2 шаблонов для каждого случая: паратезис, кавычки и *. Первый шаг - обработать многословные слова, выполнив замену на \*((\w+)+\w+)\* на $1., а затем заменив все * на ничего. Это работает, но для этого мне нужно 6 запросов для регулярных выражений. Есть ли способ лучше?

+0

Ваши примеры как замена всех ' * 's. – Mena

+0

Нет, второй пример заменяет пару \ * с полной остановкой в ​​позиции последнего '*' – Limon

+2

Простой ответ: Да. Разделение ваших исследований помогает каждому. Расскажите, что вы пробовали и почему это не соответствовало вашим потребностям. Это демонстрирует, что вы потратили время, чтобы попытаться помочь себе, это избавляет нас от повторения очевидных ответов и, прежде всего, помогает вам получить более конкретный и релевантный ответ! Также см. [Ask]. Помните, что ** SO не является бесплатным кодом! ** –

ответ

2

Стандартная библиотека Java не имеет встроенного представления о том, как выглядит полная английская фраза (рассказывать белое пространство, кроме букв или знаков препинания, насколько это вам поможет). Кроме того,

  • Никакое регулярное выражение не может правильно разобрать английский язык. Регулярные выражения не очень хорошо встраиваются.
  • Возможно, вам повезло с помощью программы проверки грамматики, например встроенной в обычное программное обеспечение для обработки текстов. Однако они по-прежнему имеют значительную частоту ошибок.
  • Хотя могут существовать библиотеки NLP Java, которые реализуют надежный синтаксический анализ, они все равно не понимают контекст и часто не выполняются.

Так нет, вы не можете сделать это с помощью Java, или с любым другим языком программирования (если у вас есть огромные ресурсы, опыт НЛП и обучение корпусы строить с) - если вы существенно не ослабить требование обнаружения " может ли последовательность символов быть автономным английским предложением «.

+0

Да, я знаю это, и мой подход не идеален в смысле реального понимания языка, но его довольно алгоритмический подход, который Я думаю, что работает * достаточно хорошо *. Мой вопрос заключается в том, есть ли эффективный способ реализации описанного вами алгоритма. – Limon

0

Так что мой текущий лучший подход требует 2 * numCases Шаблоны и выглядит следующим образом:

static Pattern pattern = Pattern.compile("\\*((\\w+)+\\w+)\\*"); 
static Pattern remove = Pattern.compile("\\*"); 

public static String transform(String str) { 
    String sentences = pattern.matcher(str).replaceAll("$1."); 
    return remove.matcher(sentences).replaceAll(""); 
} 

Запуск

System.out.println(transform("but *after* I came up with it, I searched and...")); 
System.out.println(transform("*buys airplane ticket* IM COMING FOR YOU")); 

дает ожидаемые

but after I came up with it, I searched and... 
buys airplane ticket. IM COMING FOR YOU 
+1

Если это не решение, скорее включите его в свой вопрос, чем поставьте в качестве ответа:) –

+0

@bobblebubble Хорошо, Благодарю. Не знаю, где положить это, так как это * * решение, просто не очень хорошее. Поэтому, если бы никто не опубликовал ничего лучше, мне пришлось бы вернуться к этому. – Limon

Смежные вопросы