2010-06-23 2 views
6

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

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

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

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

EDIT1

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

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

+6

Вы хотите, чтобы это означало грамматически, или это немыслимая замена регулярного выражения приемлема? – polygenelubricants

+1

Действительно ли существует такая вещь, как одно «правильное предложение» для этих входов? "Холодно!" также грамматически корректно. –

+0

Я хотел бы иметь грамматически правильное предложение, если его несколько, тогда со мной все в порядке. Примечание. Я добавил несколько примеров. – user339108

ответ

2

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

Вы после преобразования грамматики, например these.

LingPipe выглядит как это имеет некоторые межжала вещи, которые вы могли бы использовать (это Java), особенно, если вы разрабатываете систему обучения, и нужно признать «parts of speach» (как, например, предмет и глагольной, в соответствии с вашими примерами) ,

8

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

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!") 
     ); 
    } 

Это печатает (as seen on ideone.com):

 
Isn't it surprising! 
Isn't it cold! 
Isn't it $*($&%!! 
That is a hot coffee indeed... 
+1

есть ошибка компиляции в вашем коде на ideone.com ... – Jesper

+0

Также см. Вариацию вроде этого: http://ideone.com/Xl20I - Тем не менее это по-прежнему считается немым регулярным выражением. – polygenelubricants

-2

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

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

(даже проще, чем решение polygenelubricant с регулярными выражениями).

+0

Но с регулярным выражением вы можете делать такие немые вещи: http://ideone.com/Xl20I – polygenelubricants

+0

Регулярные регулярные выражения намного более гибкие и способные, чем мое простое решение, но мы не знаем, насколько далеко продвигаются требования плаката , поэтому я подумал, что представляю самое простое решение, основанное на том, что он спросил. – Jesper

+0

Я хочу, чтобы это было более общим на основе ввода, можно ли это сделать? Существуют ли какие-либо другие инструментальные средства, которые поддерживают генерацию таких восклицаний – user339108

3

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

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

Ofcourse Я не знаю, насколько важна эта функция для вашего продукта/проекта и использование Пролог, вероятно, это не вариант, так что ваш другой вариант, чтобы написать парсер, который будет извлекать глагол/существительное и т.д., и создать соответствующий " модель предложения "(или группа объектов). Затем вы можете преобразовать эту модель предложения в другую модель предложения, основанную на некоторых правилах, разработанную расширяемым образом, так что, когда новые всплывающие окна (и с таким широким доменом они будут), вы можете просто добавить новое правило твоя трансформация.

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

+0

, мы не совсем знакомы с прологом, проверим, сможет ли кто-нибудь изучить этот вариант. – user339108

1

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

+1

Разве это не доступно только в python? – dierre

+0

Да, NLTK - чистый Python. –

+0

С другой стороны, Python отлично работает под Java через Jython ... – tucuxi

1

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

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"); 
Смежные вопросы