在我的 Grails Web 应用程序中,我有一个弹出对话框,允许我输入某种类型的自然语言表达式,用于在应用程序中执行某些操作。
我目前正在用 groovy 实现解析器,并且想知道如何创建错误消息并将它们返回给客户端。
我正在考虑使用<g:formRemote>
它将使用ajax将文本字符串发送到解析器,并且在成功解析字符串后,它将执行应用程序中的操作,例如将用户添加到项目中,通常后跟重定向到一个新页面,比如说向用户展示项目的一部分。如果解析器接收到它不期望/识别的令牌,或者如果字符串不遵循正确的语法,我将能够创建一条错误消息并将其发送回客户端,允许用户尝试另一个命令。
到目前为止,我的代码看起来像这样..
在我的控制器中接收 ajax 请求
def runTemp()
{
def tokenizer = new Tokenizer()
def posTagger = new PartOfSpeechTagger()
def words = tokenizer.getTokens("add user");
def taggedWords = posTagger.tagWords(words)
taggedWords.each{
println"${it.word} : ${it.partOfSpeech}"
}
}
我的 PartOfSpeechTagger.groovy 看起来像
package uk.co.litecollab.quickCommandParser
class PartOfSpeechTagger {
def lexicons = [
//VERBS
'add': PartOfSpeech.VERB,
'new': PartOfSpeech.VERB,
'create': PartOfSpeech.VERB,
'view': PartOfSpeech.VERB,
'delete': PartOfSpeech.VERB,
'logout': PartOfSpeech.VERB,
'remove': PartOfSpeech.VERB,
'chat': PartOfSpeech.VERB,
'accept': PartOfSpeech.VERB,
'active': PartOfSpeech.VERB,
'suspend': PartOfSpeech.VERB,
'construct': PartOfSpeech.VERB,
'close': PartOfSpeech.VERB,
'add': PartOfSpeech.VERB,
//NOUNS
'project': PartOfSpeech.NOUN,
'user': PartOfSpeech.NOUN,
'task': PartOfSpeech.NOUN,
'chat': PartOfSpeech.NOUN,
'conversation': PartOfSpeech.NOUN,
//DETERMINERS
'a': PartOfSpeech.DETERMINER,
'the': PartOfSpeech.DETERMINER,
//PREPOSITIONS
'to': PartOfSpeech.PREPOSITION,
'from': PartOfSpeech.PREPOSITION,
'for': PartOfSpeech.PREPOSITION,
'with': PartOfSpeech.PREPOSITION
]
//constructor
def PartOfSpeechTagger()
{
}
def tagWords(String[] words)
{
def taggedWords = [] as ArrayList
words.each{
//removing the use of 'it' due to nested closures
println"word to search for : ${it}"
def word = it
if(inLexicons(word))
{
println"word :: ${it}"
taggedWords.add(
new TaggedWord(
lexicons.find{it.key == word}.key,
lexicons.find{it.key == word}.value)
)
}
else
{
/*
* handle errors for not finding a word?
*/
}
}
return taggedWords
}
def inLexicons(key)
{
return lexicons.containsKey(key)
}
}
您可以tagWords
在我希望能够向客户报告不期望提供的单词的方法中看到。