我想使用java API为特定句子创建感叹词?
e.g。这很令人惊讶==不是很令人惊讶! 例如天气很冷==不是很冷!
是否有任何供应商或工具可以帮助您生成感叹号,前提是您提供了一个句子(即上例中的左侧)。注意:句子将由用户提供,我们应该能够得到正确的句子。
我不确定,是否需要在其他类别下标记
EDIT1
更多示例,我希望这是尽可能通用的
e.g。他们迟到==他们不迟到! 例如他看起来很累==他看起来不累! 例如那个孩子很脏==这个孩子不是很脏! 例如很热= =不热吗!
答案 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!")
);
}
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解决方案更简单。)