私の 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
提供された単語が予期されていなかったことをクライアントに報告できるようにしたいメソッドで確認できます。