Как создавать восклицания для конкретного предложения

Я хотел бы создать восклицания для конкретного предложения с помощью API Java?

например, это удивительно == Разве это не удивительно!
Например, холодно == Разве не холодно!

Существуют ли какие-либо поставщики или инструменты, которые помогут вам генерировать восклицательные знаки при условии, что вы даете предложение (то есть слева в приведенном выше примере). Примечание: предложения будут предоставлены пользователем, и мы сможем получить правильное предложение.

Я не уверен, если это нужно пометить в других категориях

EDIT1

Еще несколько примеров, я хотел бы, чтобы это было как можно более общим

Например, они опоздали == Не опоздали!
Например, он выглядит усталым == Разве он не выглядит усталым!
Например, этот ребенок грязный == Разве этот ребенок не грязный!
например, это горячо == Разве это не жарко!

6 ответов

Решение

Этот вопрос не о восклицаниях. Вы можете просто добавить "!" ко всем вашим входным примерам и получите действительные восклицательные предложения.

Вы после грамматических преобразований, как эти.

Похоже, что LingPipe имеет некоторые интересные вещи, которые вы могли бы использовать (это Java), особенно если вы разрабатываете систему обучения и вам необходимо распознавать " части речи" (например, субъект и фраза глагола, как в ваших примерах).

В зависимости от того, насколько "умным" и "сложным" вы хотите, чтобы это было, это может быть либо очень трудной, либо очень легкой проблемой. Вот простое решение регулярных выражений, которое довольно глупо:

    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):

Разве это не удивительно!
Разве не холодно!
Разве это не $*($&%!!
Это действительно горячий кофе...

Я не думаю, что вы будете очень далеко с простыми конструкциями регулярных выражений. Проблема в том, что, поскольку вы, очевидно, работаете в области естественного языка, существует множество возможностей, которые вы должны принять во внимание. Насколько общим должно быть решение?

Я знаю, что вы сказали, что что-то подобное возможно с Java API, но будет ли использование Prolog вариантом? SWI-Prolog имеет интерфейс Java (JPL), и описываемая вами проблема будет гораздо лучше решена в 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, затем уточните свой вопрос: с каким подмножеством английского языка вы хотите, чтобы ваш код работал, и более четкое определение типов восклицательного перевода, которые вы хотите.

Я не знаю, насколько изощренным вы хотите, чтобы это было, но если вы просто хотите изменить выражения вроде "Это что угодно" на "Разве это не так!", То это очень просто:

String text = "It's cold";
String result = "Isn't it " + text.substring(5) + "!";

(Еще проще, чем решение полигеномасляной смазки с регулярными выражениями).

Другие вопросы по тегам