【发布时间】:2014-04-10 19:08:11
【问题描述】:
我正在尝试为我们公司创建一个聊天机器人,我们可以在其中向该机器人发送消息,然后使用 opennlp 解析字符串并运行一些脚本。
例如查询是
"I'm going to work on ProjectY, can you close ProjectX?"
这应该会触发带有参数 ProjectX 的脚本 closeRepo.sh。
我遇到的问题是它正确地将上面的句子解析为两部分:
"I'm going to work on ProjectY"
和 "你能关闭 ProjectX"
但是,并非所有可能的项目都被正确解析。我有一个项目名称,其中 opennlp 不将其视为 NP,而是将其视为 ADVB 或其他东西,我认为它将其视为句子:你能快速关闭或类似的东西。
这是我的解析代码,我放出模型加载(我使用这里提供的标准模型:http://opennlp.sourceforge.net/models-1.5/)
String sentences[] = sentenceDetector.sentDetect(input);
for(int i = 0; i < sentences.length; i++){
String[] tokens = tokenizer.tokenize(sentences[i]);
StringBuffer sb = new StringBuffer();
for(String t : tokens){
sb.append(t);
sb.append(' ');
}
sb.deleteCharAt(sb.length()-1);//remove last space
sentences[i] = sb.toString();
}
ArrayList<Parse> parses = new ArrayList<Parse>();
for(String s : sentences){
Parse topParses[] = ParserTool.parseLine(s, parser, 1);
if(topParses.length > 0){
parses.add(topParses[0]);
}
}
return parses;
如果这样会更容易,我愿意切换到斯坦福的 nlp。但我的问题是:
有没有办法让 opennlp 列出我的项目并将它们检测为 NP还是NN?
【问题讨论】: