如何为特定句子创建感叹词

时间:2010-06-23 11:32:38

标签: java regex nlp text-manipulation

我想使用java API为特定句子创建感叹词?

e.g。这很令人惊讶==不是很令人惊讶! 例如天气很冷==不是很冷!

是否有任何供应商或工具可以帮助您生成感叹号,前提是您提供了一个句子(即上例中的左侧)。注意:句子将由用户提供,我们应该能够得到正确的句子。

我不确定,是否需要在其他类别下标记

EDIT1

更多示例,我希望这是尽可能通用的

e.g。他们迟到==他们不迟到! 例如他看起来很累==他看起来不累! 例如那个孩子很脏==这个孩子不是很脏! 例如很热= =不热吗!

6 个答案:

答案 0 :(得分: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 :(得分:3)

我认为你不会在简单的正则表达式结构上走得太远。问题在于,由于您显然是在自然语言领域中运作,因此您必须考虑许多可能性。解决方案有多普遍?

我知道你说使用Java API可以做到这一点,但是使用Prolog会是一个选择吗? SWI-Prolog有一个Java接口(JPL),你在Prolog中可以更好地解决你所描述的问题。事实上,这是Prolog最擅长的问题,也被用于学术界。 SWI-Prolog甚至包括一个自然语言处理包(http://www.swi-prolog.org/pldoc/package/nlp.html)。这是我所知道的解决问题的最佳方式。

当然我不知道这个功能对你的产品/项目有多重要,使用Prolog可能不是一个选项,所以你的另一个选择就是编写一个解析器来提取动词/名词等并创建一个相应的“句子”模型“(又名对象组)。然后你可以根据一些规则将这个句子模型转换成另一个句子模型,这些规则是以可扩展的方式设计的,这样当新案例弹出时(他们会有这么宽的域)你可以添加一个新的“规则”到你的转型。

这确实是一个非平凡的解决方案,但我无法想象一个简单的解决方案可能会是什么样子。

答案 2 :(得分:2)

这个问题不是关于惊叹。你可以添加'!'所有输入示例,并获得有效的感叹句。

您正在进行语法转换,例如these

LingPipe看起来它有一些你可以使用的东西(它是java),特别是如果你正在开发一个学习系统,并且需要识别'parts of speach'(例如主语和动词)短语,根据你的例子)。

答案 3 :(得分:1)

查看Natural Language ToolKit,然后将您的问题优化为您希望代码使用的英语语言的哪个子集,并更清楚地定义您想要的感叹号翻译类型。

答案 4 :(得分: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"); 

答案 5 :(得分:-2)

我不知道你想要多么复杂,但如果你只是想把“它不是什么”这样的表达改为“不是它!”,那么这很简单:

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

(甚至比使用正则表达式的polygenelubricant解​​决方案更简单。)