Я хотел бы создать восклицания для конкретного предложения с помощью API Java?
например, Это удивляет ==, Не это удивление!
например, холодно ==, Не это холод!
Есть ли любые поставщики или инструменты, которые помогают Вам генерировать восклицания, если Вы даете предложение (т.е. левая сторона в вышеупомянутом примере).Примечание: Предложения будут обеспечены пользователем, и мы должны смочь получить корректное предложение.
Я не уверен, если это должно быть отмечено под другими категориями
EDIT1
Еще некоторые примеры, я хотел бы, чтобы это было максимально универсально
например, Они поздние ==, Не они поздно!
например, Он выглядит усталым ==, не Делает он выглядит усталым!
например, Тот ребенок грязен ==, Не тот грязный ребенок!
например, жарко ==, Не это горячий!
Этот вопрос не о восклицаниях. Вы можете просто добавить "!" ко всем примерам ввода и получайте действительные восклицательные предложения.
Вам нужны грамматические преобразования, такие как эти .
LingPipe выглядит так, будто в нем есть кое-что интересное, что вы могли бы использовать (это java), особенно если вы разрабатываете систему обучения и вам нужно распознавать « части речи » (например, тема и глагольная фраза в соответствии с вашими примерами).
В зависимости от того, насколько "умным" и "сложным" вы хотите его сделать, это может быть либо очень сложной, либо очень простой проблемой. Вот простое regex-решение, которое довольно тупое:
String[] sentences = {
"It's surprising",
"It's cold",
"It's $*($&%!",
"That is a hot coffee indeed..."
};
for (String sentence : sentences) {
System.out.println(
sentence.replaceAll("It's (.+)", "Isn't it $1!")
);
}
Это печатает (как видно на ideone.com):
Isn't it surprising! Isn't it cold! Isn't it $*($&%!! That is a hot coffee indeed...
Я не знаю, насколько изощренным вы хотите, чтобы это было, но если вы просто хотите изменить выражения вроде «Это что угодно» на «Разве это не то!», То это очень просто:
String text = "It's cold";
String result = "Isn't it " + text.substring(5) + "!";
( Даже проще, чем решение полигенной смазки с регулярными выражениями).
Я не думаю, что вы далеко уйдете с простыми конструкциями регулярных выражений. Проблема в том, что, поскольку вы, очевидно, работаете в области естественного языка, существует множество возможностей, которые вам нужно принять во внимание. Насколько общим должно быть решение?
Я знаю, что вы сказали, что что-то подобное возможно с Java API, но можно ли использовать Prolog? SWI-Prolog имеет интерфейс Java (JPL), и проблема, которую вы описываете, будет намного лучше решена в Prolog. Фактически, это тип проблемы, с которой Prolog справляется лучше всего и для решения которой используется в академических кругах. SWI-Prolog даже включает пакет для обработки естественного языка ( http://www.swi-prolog.org/pldoc/package/nlp.html ). Это лучший из известных мне способов справиться с вашей проблемой.
Конечно, я не знаю, насколько важна эта функция для вашего продукта / проекта, и использование Prolog, вероятно, не вариант, поэтому другой вариант - написать синтаксический анализатор, который бы извлекал глагол / существительное и т. Д. И создавал соответствующее "предложение" модель »(она же группа предметов). Затем вы можете преобразовать эту модель предложения в другую модель предложения, основанную на некоторых правилах, разработанных с возможностью расширения, чтобы при появлении новых случаев (а с такой широкой областью они будут) вы могли просто добавить новое «правило» в ваше преобразование.
Это действительно нетривиальное решение, но я не могу представить, как может выглядеть тривиальное решение.
Вот мой вариант с использованием только регекспов, без глубокого анализа языка. Его можно легко обмануть, но он справляется с большинством ваших примеров.
s.replace("(.+?)('re| are) (.+)", "Aren't $1 $3!")
.replace("(.+?)('s| is) (.+)", "Isn't $1 $3!")
.replace("(I|You|We|They) (.+)", "Don't $1 $2!")
.replace("(He|She|It) (\\w+)s (.*)", "Doesn't $1 $2 $3!")
// correct case
.replace(" You", " you")
.replace(" He", " he")
.replace(" She", " she")
.replace(" It", " it")
.replace(" We", " we")
.replace(" They", " they");
Посмотрите на Natural Language ToolKit, затем уточните свой вопрос, с каким подмножеством английского языка вы хотите, чтобы работал ваш код, и более четкое определение типов перевода восклицаний, которые вам нужны.