6

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

例如,令人惊讶 == 是不是很令人惊讶!
例如,很冷== 不冷吗!

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

我不确定,如果这需要在其他类别下标记

编辑1

还有一些例子,我希望它尽可能通用

例如,他们迟到了 == 他们是不是迟到了!
例如,他看起来很累 == 他看起来不累吗!
例如那个孩子很脏==那个孩子不脏吗!
例如,它很热 == 不热吗!

4

6 回答 6

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

这打印(如在 ideone.com 上看到的):

是不是很意外!
不冷吗!
不是$*($&%!!
这确实是一杯热咖啡……
于 2010-06-23T11:39:33.720 回答
3

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

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

当然我不知道这个特性对你的产品/项目有多重要,并且使用 Prolog 可能不是一个选项,所以你的另一个选择是编写一个解析器来提取动词/名词等并创建一个相应的“句子模型”(又名对象组)。然后你可以将这个句子模型转换为基于一些规则的另一个句子模型,以可扩展的方式设计,这样当新案例弹出时(并且它们将具有如此广泛的领域)你可以添加一个新的“规则”到你的转变。

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

于 2010-07-30T12:53:34.137 回答
2

这个问题不是关于感叹的。您可以添加“!” 到您所有的输入示例并获得有效的感叹句。

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

LingPipe看起来有一些您可以使用的有趣的东西(它是 java),特别是如果您正在开发一个学习系统,并且需要识别“部分语言”(例如,根据您的示例,主语和动词短语)。

于 2010-08-04T14:59:12.103 回答
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"); 
于 2010-08-05T20:13:57.827 回答
1

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

于 2010-07-30T20:55:43.067 回答
-2

我不知道您希望它有多复杂,但如果您只想将“它是什么”这样的表达更改为“不是它什么!”,那么这非常简单:

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

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

于 2010-06-23T11:41:28.930 回答