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

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

например, Это удивляет ==, Не это удивление!
например, холодно ==, Не это холод!

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

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

EDIT1

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

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

6
задан Alan Moore 30 July 2010 в 12:38
поделиться

6 ответов

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

Вам нужны грамматические преобразования, такие как эти .

LingPipe выглядит так, будто в нем есть кое-что интересное, что вы могли бы использовать (это java), особенно если вы разрабатываете систему обучения и вам нужно распознавать « части речи » (например, тема и глагольная фраза в соответствии с вашими примерами).

2
ответ дан 8 December 2019 в 18:32
поделиться

В зависимости от того, насколько "умным" и "сложным" вы хотите его сделать, это может быть либо очень сложной, либо очень простой проблемой. Вот простое 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...
8
ответ дан 8 December 2019 в 18:32
поделиться

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

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

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

-2
ответ дан 8 December 2019 в 18:32
поделиться

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

Я знаю, что вы сказали, что что-то подобное возможно с Java API, но можно ли использовать Prolog? SWI-Prolog имеет интерфейс Java (JPL), и проблема, которую вы описываете, будет намного лучше решена в Prolog. Фактически, это тип проблемы, с которой Prolog справляется лучше всего и для решения которой используется в академических кругах. SWI-Prolog даже включает пакет для обработки естественного языка ( http://www.swi-prolog.org/pldoc/package/nlp.html ). Это лучший из известных мне способов справиться с вашей проблемой.

Конечно, я не знаю, насколько важна эта функция для вашего продукта / проекта, и использование Prolog, вероятно, не вариант, поэтому другой вариант - написать синтаксический анализатор, который бы извлекал глагол / существительное и т. Д. И создавал соответствующее "предложение" модель »(она же группа предметов). Затем вы можете преобразовать эту модель предложения в другую модель предложения, основанную на некоторых правилах, разработанных с возможностью расширения, чтобы при появлении новых случаев (а с такой широкой областью они будут) вы могли просто добавить новое «правило» в ваше преобразование.

Это действительно нетривиальное решение, но я не могу представить, как может выглядеть тривиальное решение.

3
ответ дан 8 December 2019 в 18:32
поделиться

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

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"); 
1
ответ дан 8 December 2019 в 18:32
поделиться

Посмотрите на Natural Language ToolKit, затем уточните свой вопрос, с каким подмножеством английского языка вы хотите, чтобы работал ваш код, и более четкое определение типов перевода восклицаний, которые вам нужны.

1
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: