Chat Processor is a natural language interpreter that tries to tag messages in order to determine the best answer is for it. It works as the main controller of the NOS Bot, making requests to other components based on the user's queries/questions. It supports two execution modes, a default one and a rules based mode. In the default mode the users messages are understood using a dictionary where each element is a category, which represents a feature made available by the bot, as well as a group of words against which each message is compared to in order to tag it in one of the categories. Each message is spell checked (symspellpy with frequency words generated from a OpenSubtitles corpus) to fix misspellings/typos. Entity recognition is achieved by using a modified multilingual version of BERT model developed by deeppavlov although, because some entities are not detected by the model, regex is also used. The response to each user is "prettified" using the text formatting capabilities of Telegram.
- pip
- python3.6
- redis
- gfortran
- libblas-dev
- liblapack-dev
- libhdf5-dev
python3.6 -m venv env
source ./env/bin/activate
pip install -r requirements.txt
python3.6 -m deeppavlov install ner_ontonotes_bert_mult
redis-server &
python3.6 chat_processor/app.py
- Build Docker image:
docker build -t chat_processor .
- Create Docker volume for data persistence across containers:
docker volume create chat_processor
- Run Docker container:
docker run -p 5001:5001 -v chat_processor:/root/ -it chat_processor
NOTE: You need to run redis-server apart (redis-server &
).
Get response for a user message
POST /getResponse
Parameter | Type | Description |
---|---|---|
idChat |
string |
Required. Chat id. |
idUser |
string |
Required. User id. |
msg |
string |
Required. User message. |
name |
string |
Required. User name. |
timestamp |
int |
Required. Message date in Unix time. |
location |
None or {"lat": float, "lon": float} |
Required. User location. |
Example:
{
"idChat":"111",
"idUser":"111",
"msg":"Quero ver um filme.",
"name":"António Maria",
"timestamp": 1579519622,
"location": None
}
Example sending location:
{
"idChat":"111",
"idUser":"111",
"msg":"Quero ver um filme.",
"name":"António Maria",
"timestamp": 1579519622,
"location": {
"lat": 32.543042,
"lon": -10.424717
}
}
Returns a message (string
) to send to user.