Hello everybody,
I am new to Rasa and I have a question how to best structure my application. Before Rasa should check the message for intents, I want to check if there are spelling errors in the users input. If there are errors -> send the possible corrections to user. I am going to use LanguageTool for spellchecks.
For communication between client and server I use websockets, which are already working.
My questions now are:
how can I achieve the LanguageTool part? Do I need to setup a custom component? Or an extra server/service between client and rasa-server?
if I want to add more Socket.io events, how can I do that? By default only “user_uttered” and “bot_uttered” are available, right? I would like to have an event which is triggered when there’s spelling errors.
I see 2 situations why you would want to offer spelling suggestions:
The spelling error is preventing Rasa NLU from detecting the intent correctly
In this case, you can classify it as an unknown intent and handle it in a custom action later on.
The intent is classified correctly
Even here, you can use a custom action to set a slot like misspelt to True and handle it inside a custom action again.
Thanks for your quick answer Amogh. The reason why I am offering spelling suggestion is that I am implementing a bot to learn English with. So it is essential to know when there are mistakes in the sentence.
I now managed to solve the problem by checking the sentence for language errors in the socket.io input channel specifically in the method async def handle_message(sid, data) . Here I can call the languagetool endpoint.
The second part of my question I also managed to solve. Again I customized the socket.ioInputChannel. Socket events can be added here in the __init__ function and by defining a method that is registered as a socket event.
i have pre processing pipeline that i want user input to process through. So is there any interceptor kind of thing to do manipulation on user input while sending the user input to rasa?