diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..7f62c12d9dd17e019a74ce206bde48e3db57b353 --- /dev/null +++ b/app.py @@ -0,0 +1,8 @@ +import uvicorn + +if __name__ == "__main__": + uvicorn.run( + app="src.main:api", + host="0.0.0.0", + workers=3 + ) \ No newline at end of file diff --git a/definitions.py b/definitions.py new file mode 100644 index 0000000000000000000000000000000000000000..81c0edfdf68ef1dfa7166e281d9127924c133b38 --- /dev/null +++ b/definitions.py @@ -0,0 +1,3 @@ +import os + +ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..85e67f4352abc88fff39b955aa8377ef80f84c89 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +fastapi==0.103.2 +uvicorn[standard]==0.23.2 +numpy==1.21.6 +sentence-transformers==2.2.2 +regex \ No newline at end of file diff --git a/src/__pycache__/definitions.cpython-39.pyc b/src/__pycache__/definitions.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ac43e07506a4ed654568890d6ff2020b234b0c22 Binary files /dev/null and b/src/__pycache__/definitions.cpython-39.pyc differ diff --git a/src/__pycache__/main.cpython-39.pyc b/src/__pycache__/main.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ec0a69c9a4a9497d695046ac6de3b7baec48a2c Binary files /dev/null and b/src/__pycache__/main.cpython-39.pyc differ diff --git a/src/constants/__init__.py b/src/constants/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000000000000000000000000000000000000..e7bc4e16cea8ad837f9d6ad89a662e4a0636067e --- /dev/null +++ b/src/main.py @@ -0,0 +1,71 @@ +import os +from fastapi import Body, FastAPI +from fastapi.middleware.cors import CORSMiddleware +from contextlib import asynccontextmanager +from typing_extensions import Annotated +from sentence_transformers import SentenceTransformer +from .processors.dialog.dialog_management import process_input_bn, reset_chatbot +from .processors.downloader.model_downloader import download +from .models.request import Request +from .utils.identifier import Identifier +from .server.routers import users +from .utils.constants import Constants +from definitions import ROOT_DIR + +# @asynccontextmanager +# async def lifespan(app: FastAPI): +# try: +# model = SentenceTransformer(Constants.MODEL_PATH) +# except: +# download() +# model = SentenceTransformer(Constants.MODEL_PATH) +# finally: +# if model: +# yield +# reset_chatbot() +# else: +# # Something needs to be done here +# pass + +# api = FastAPI(lifespan=lifespan) +# api.include_router(users) + +api = FastAPI() + +origins = [ + "http://localhost.tiangolo.com", + "https://localhost.tiangolo.com", + "http://localhost", + "http://localhost:3000", +] + +api.add_middleware( + CORSMiddleware, + allow_origins=origins, + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) + +try: + model = SentenceTransformer(Constants.MODEL_PATH) +except: + download() + model = SentenceTransformer(Constants.MODEL_PATH) +finally: + reset_chatbot() + +@api.get('/') +async def root(): + return {'data': 'Hello World!'} + +@api.post('/query') +async def query(data: Annotated[Request, Body(embed=True)]): + global model + query = data.query.lstrip() + identifier = Identifier(query) + if (identifier.is_bangla): + result = process_input_bn(query, model) + return {'data': result} + else: + return {'data': 'I can\'t understand you!'} \ No newline at end of file diff --git a/src/models/__pycache__/request.cpython-39.pyc b/src/models/__pycache__/request.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09363ec59993b112293f70e0b0d969c61c4f55b8 Binary files /dev/null and b/src/models/__pycache__/request.cpython-39.pyc differ diff --git a/src/models/request.py b/src/models/request.py new file mode 100644 index 0000000000000000000000000000000000000000..d735ab2fdfaa64a5bed9821933d4bfcb6cfc09dd --- /dev/null +++ b/src/models/request.py @@ -0,0 +1,7 @@ +from pydantic import BaseModel, Field + +class Request(BaseModel): + query: str = Field( + title='The sentence for applying NER', + max_length=1024 + ) \ No newline at end of file diff --git a/src/processors/__init__.py b/src/processors/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/processors/__pycache__/__init__.cpython-39.pyc b/src/processors/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0254e01a40eb134469d5212b615c51c8af256f80 Binary files /dev/null and b/src/processors/__pycache__/__init__.cpython-39.pyc differ diff --git a/src/processors/dialog/__init__.py b/src/processors/dialog/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/processors/dialog/__pycache__/__init__.cpython-39.pyc b/src/processors/dialog/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da87eac8e3a4040cc510e0f8b81bec53dd3e72ce Binary files /dev/null and b/src/processors/dialog/__pycache__/__init__.cpython-39.pyc differ diff --git a/src/processors/dialog/__pycache__/dialog_management.cpython-39.pyc b/src/processors/dialog/__pycache__/dialog_management.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a2d758f486d00c708660b684b695d75bc8e7eb91 Binary files /dev/null and b/src/processors/dialog/__pycache__/dialog_management.cpython-39.pyc differ diff --git a/src/processors/dialog/dialog_management.py b/src/processors/dialog/dialog_management.py new file mode 100644 index 0000000000000000000000000000000000000000..1bc3af51bc71db6e3b7c95f61d45d13c2b153b02 --- /dev/null +++ b/src/processors/dialog/dialog_management.py @@ -0,0 +1,161 @@ +import os +import json +import string +import numpy as np +from datetime import date, datetime +from sklearn.metrics.pairwise import cosine_similarity +from src.processors.nlp.natural_language_understanding import get_intent_bert_avg +from src.processors.nlp.natural_language_processing import preprocess_bn +from src.processors.nlp.natural_language_generation import respond_greet_bn +from definitions import ROOT_DIR + + +history=[] +intent=-1 +turn=-1 +eoc='' #end of conversations +similarity_threshold=0.75 +intent_threshold=0.80 + + +def reset_chatbot(): + + """ + This function is used for reseting the chatbot to the initial mode. + """ + + global turn, history + turn = -1 + history.clear() + + + +def process_input_bn(user_input, model): + + """ + This function is used for processing user input in Bangla. + First the databases are loaded. + The core structure is based on turn counts. A turn consists of one question from the user and one response from the chatbot. + For the first turn, intent is identified. + After intent identification, the response of the first turn of corresponding intent in picked from the database. + For rest of the turns, chatbot searchs if the user query is valid or not. + For valid query, it picks response of corresponding turn and intent. + For invalid query, it asks for clearification. + If predefined conversation length exceeds, the chatbot is reset. + If it requires any verification and information retrieval task, it call anoter function for verification and information retrieval. + Pseudocode + ----------------------------------------------- + Preprocess user input. + Load databases. + If first turn: + Identify intent using another function. + If intent is invalid: + Show intent suggestions. + Else: + Return response of corresponding turn and intent + Else: + If conversation length exceeds: + Show intent suggestions. + Else if verification or retrieval is required: + Retrieve information using another functionsss. + Else: + If user query is valid: + Return response of corresponding turn and intent + Else: + Ask for clarification. + + """ + + global turn, history, intent, similarity_threshold, intent_threshold + + turn+=1 + + processed_input=preprocess_bn(user_input) + + user_kb_path=os.path.join(ROOT_DIR,'static','knowledge_base','user_queries_v1_bn.json') + with open(user_kb_path, 'r') as u_f: + user_kb_bn=json.load(u_f) + + chatbot_kb_path=os.path.join(ROOT_DIR,'static','knowledge_base','chatbot_queries_v1_bn.json') + with open(chatbot_kb_path, 'r') as c_f: + chatbot_kb_bn=json.load(c_f) + + if turn==0: # for the first turn + intent, scores=get_intent_bert_avg(user_input, user_kb_bn, model) + intent_score=scores[intent] + print('Intent: ', intent) + # print('Similarity score: ', intent_score) + print('Similarity Scores: ', scores) + if intent==-1 or intent_score' in response: + response=respond_greet_bn(response) + history.append('chatbot_'+response) + else: + history.append('user_'+user_input) + if turn==len(user_kb_bn[str(intent)]): # if conversation length exceeds + response='সরি, তোমার কথা আমি বুঝতে পারছিনা। আরেকবার বলো।' + history.append('chatbot_'+response) + turn=-1 + history.clear() + else: + idx=-1 + mx_score=0 + user_input_emb=model.encode(processed_input) + user_input_emb=np.reshape(user_input_emb, (1,user_input_emb.shape[0])) + + for candidate in user_kb_bn[str(intent)][str(turn)]: + can_emb=model.encode(candidate) + can_emb=np.reshape(can_emb, (1,can_emb.shape[0])) + + score=cosine_similarity(user_input_emb, can_emb) + if score>mx_score: + mx_score=score + idx=user_kb_bn[str(intent)][str(turn)].index(candidate) + + if mx_score>=similarity_threshold: + response=chatbot_kb_bn[str(intent)][str(turn)][idx] + else: + response='সরি, তোমার কথা আমি বুঝতে পারছিনা। আরেকবার বলো।' + turn-=1 + history.append('chatbot_'+response) + + if 'backToTurn' in response: + _,turn=response.split('_') + turn=int(turn[:-1]) + response=chatbot_kb_bn[str(intent)][str(turn)][0] + history.append('chatbot_'+response) + + if response.endswith(eoc): + + if intent==14: + submit_complain(history) + + today=date.today() + now=datetime.now() + time=now.strftime("%H:%M:%S") + + history_merged='\n'.join(history) + history_merged2=time+'\n'+history_merged+'\n\n' + + # print(history_merged2) + + sub_folder=str(today) + history_path=os.path.join(ROOT_DIR,'static','history',sub_folder+'.txt') + f_bn=open(history_path, 'a+') + f_bn.write(history_merged2) + f_bn.close() + + print('Chat history has been saved.') + + reset_chatbot() + + return response diff --git a/src/processors/downloader/__init__.py b/src/processors/downloader/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/processors/downloader/__pycache__/__init__.cpython-39.pyc b/src/processors/downloader/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f1b1dc6772fc689ec4ec8ca7f8f7cd56d0d33217 Binary files /dev/null and b/src/processors/downloader/__pycache__/__init__.cpython-39.pyc differ diff --git a/src/processors/downloader/__pycache__/model_downloader.cpython-39.pyc b/src/processors/downloader/__pycache__/model_downloader.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85791f73c11de8ebb5a6e4691e11a3dddf4d24fe Binary files /dev/null and b/src/processors/downloader/__pycache__/model_downloader.cpython-39.pyc differ diff --git a/src/processors/downloader/model_downloader.py b/src/processors/downloader/model_downloader.py new file mode 100644 index 0000000000000000000000000000000000000000..9c92c09fff7019aa1fcc92ff5c0dd36fb6cd39f1 --- /dev/null +++ b/src/processors/downloader/model_downloader.py @@ -0,0 +1,11 @@ +import os +from sentence_transformers import SentenceTransformer, models +from definitions import ROOT_DIR + +def download(): + model_dir=os.path.join(ROOT_DIR, 'static', 'models') + model_name='bert-base-multilingual-uncased' + + model=SentenceTransformer(model_name) + + model.save(os.path.join(model_dir,model_name)) \ No newline at end of file diff --git a/src/processors/nlp/__pycache__/natural_language_generation.cpython-39.pyc b/src/processors/nlp/__pycache__/natural_language_generation.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fa33b9a42c88606a70d82a3dce6f163d4cd97a12 Binary files /dev/null and b/src/processors/nlp/__pycache__/natural_language_generation.cpython-39.pyc differ diff --git a/src/processors/nlp/__pycache__/natural_language_processing.cpython-39.pyc b/src/processors/nlp/__pycache__/natural_language_processing.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d89b7f172885d028a498fb8f37a1e52ee031cc8 Binary files /dev/null and b/src/processors/nlp/__pycache__/natural_language_processing.cpython-39.pyc differ diff --git a/src/processors/nlp/__pycache__/natural_language_understanding.cpython-39.pyc b/src/processors/nlp/__pycache__/natural_language_understanding.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79e860cde487e4f4a609282f9ccc0710eba2d662 Binary files /dev/null and b/src/processors/nlp/__pycache__/natural_language_understanding.cpython-39.pyc differ diff --git a/src/processors/nlp/natural_language_generation.py b/src/processors/nlp/natural_language_generation.py new file mode 100644 index 0000000000000000000000000000000000000000..d985f2dce2059f3f679305261de5900d7149345c --- /dev/null +++ b/src/processors/nlp/natural_language_generation.py @@ -0,0 +1,26 @@ +import string +from datetime import date, datetime + + + +def respond_greet_bn(template_response): + + now=datetime.now() + time_now=now.strftime("%H:%M:%S") + h,m,_=time_now.split(':') + minutes=int(h)*60+int(m) + + day_period='' + + if minutes>300 and minutes<=720: + day_period='সকাল' + elif minutes>720 and minutes<=1020: + day_period='বিকাল' + elif minutes>1020 and minutes<=1260: + day_period='সন্ধ্যা' + elif minutes>1260 or minutes<=300: + day_period='রাত্রি' + + response=template_response.replace('', day_period) + + return response \ No newline at end of file diff --git a/src/processors/nlp/natural_language_processing.py b/src/processors/nlp/natural_language_processing.py new file mode 100644 index 0000000000000000000000000000000000000000..7bf0408307c9ced99086ffb310a8242861f04d64 --- /dev/null +++ b/src/processors/nlp/natural_language_processing.py @@ -0,0 +1,21 @@ +import string + + + +def preprocess_bn(txt): + + """ + This functions is used for preprocessing Bangla text. + Two major preprocessing is done- + 1. Punctuations removal. + 2. Whitespace removal. + Processed text is returned as a return value. + """ + + for punc in string.punctuation: + txt=txt.replace(punc, '') + txt=txt.replace('।', '') + + txt=' '.join(txt.split()) + + return txt \ No newline at end of file diff --git a/src/processors/nlp/natural_language_understanding.py b/src/processors/nlp/natural_language_understanding.py new file mode 100644 index 0000000000000000000000000000000000000000..a5a8b9a5c47f2e02097ef2bcf7021af7ea25a048 --- /dev/null +++ b/src/processors/nlp/natural_language_understanding.py @@ -0,0 +1,107 @@ +import numpy as np +from datetime import date, datetime +from sklearn.metrics.pairwise import cosine_similarity + + + +def get_intent(txt, db): + + """ + This function is used for identifying intent using a keyword based approach. + Some predefined set of keywords (associated with intent id) are searched with the given string. + The intent id of first matched keyword is returned as the intent. + Keywords are manually picked and arranged in such way and sequence that only correct intent is returned. + Works of smaller dataset. + """ + + for i in range(len(db)): + for keyword in db[str(i)]['keywords']: + if keyword in txt: + return i + + +def get_intent_bert(txt, db, model): + + """ + This function is used for identifying intent using sentence similarity approach. + BERT pre-trained model has been used for getting the sentence embeddings. + Cosine similarity is used for getting the similarity score. + A predefined set of questions with associate intent label has been kept in a database. + For each intent label, there are multiple questions. + Intent of the highest similarity score is returned. + Pseudocode + ----------------------------------------------- + Get the embeddings of the given text. + For each intent: + For each question of that intent: + Get the embedding of the question + Calculate similarity score + Update maximum score and intent to be returned + Return the intent + """ + + + rv=-1 + mx_score=-1 + txt_emb=model.encode(txt) + txt_emb=np.reshape(txt_emb, (1,txt_emb.shape[0])) + + for intent in range(len(db)): + candidates=db[str(intent)]['0'] + + for candidate in candidates: + can_emb=model.encode(candidate) + can_emb=np.reshape(can_emb, (1,can_emb.shape[0])) + + score=cosine_similarity(txt_emb, can_emb) + if score>mx_score: + mx_score=score + rv=intent + + return rv, mx_score + + +def get_intent_bert_avg(txt, db, model): + + """ + This function is used for identifying intent using sentence similarity approach. + BERT pre-trained model has been used for getting the sentence embeddings. + Cosine similarity is used for getting the similarity score. + A predefined set of questions with associate intent label has been kept in a database. + For each intent label, there are multiple questions. + An average similarity score is calculated for each intent over the questions. + Intent of the highest average similarity score is returned. + Pseudocode + ----------------------------------------------- + Get the embeddings of the given text. + For each intent: + For each question of that intent: + Get the embedding of the question + Calculate similarity score + Calculate average similarity score that that intent + Return intent of highest average similarity score + """ + + rv=-1 + mx_score=-1 + + txt_emb=model.encode(txt) + txt_emb=np.reshape(txt_emb, (1,txt_emb.shape[0])) + + scores_all=[] + for intent in range(len(db)): + candidates=db[str(intent)]['0'] + + scores=[] + for candidate in candidates: + can_emb=model.encode(candidate) + can_emb=np.reshape(can_emb, (1,can_emb.shape[0])) + + score=cosine_similarity(txt_emb, can_emb) + scores.append(score) + + scores_all.append(np.mean(scores)) + + intent=np.argmax(scores_all) + + return intent, scores_all diff --git a/src/server/__init__.py b/src/server/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/server/__pycache__/__init__.cpython-39.pyc b/src/server/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ecf747dd6c89f4f3b45a7f675baf672acf127c2a Binary files /dev/null and b/src/server/__pycache__/__init__.cpython-39.pyc differ diff --git a/src/server/router.py b/src/server/router.py new file mode 100644 index 0000000000000000000000000000000000000000..c5dd21dfd2ff91e472399e1ac2c53575c75aad37 --- /dev/null +++ b/src/server/router.py @@ -0,0 +1 @@ +from fastapi import APIRouter \ No newline at end of file diff --git a/src/server/routers/__pycache__/users.cpython-39.pyc b/src/server/routers/__pycache__/users.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..98034e12fa66429e8e2d986d3baa7a9a265fedef Binary files /dev/null and b/src/server/routers/__pycache__/users.cpython-39.pyc differ diff --git a/src/server/routers/auth.py b/src/server/routers/auth.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/server/routers/users.py b/src/server/routers/users.py new file mode 100644 index 0000000000000000000000000000000000000000..19020f8c88326364080f1eb2772c77fe841c6c42 --- /dev/null +++ b/src/server/routers/users.py @@ -0,0 +1,20 @@ +from fastapi import Body, APIRouter +from typing_extensions import Annotated +from src.models.request import Request +from sentence_transformers import SentenceTransformer +from src.processors.dialog.dialog_management import process_input_bn, reset_chatbot +from src.processors.downloader.model_downloader import download +from src.utils.identifier import Identifier +from definitions import ROOT_DIR + +router = APIRouter() + +@router.post('/query') +async def query(data: Annotated[Request, Body(embed=True)]): + query = data.query.lstrip() + identifier = Identifier(query) + if (identifier.is_bangla): + result = process_input_bn(query, model) + return {'data': result} + else: + return {'data': 'I can\'t understand you!'} \ No newline at end of file diff --git a/src/server/routes.py b/src/server/routes.py new file mode 100644 index 0000000000000000000000000000000000000000..996fa0fd1a4fd4e93448852c8e412ac426cc71ec --- /dev/null +++ b/src/server/routes.py @@ -0,0 +1,21 @@ +from fastapi import Body, FastAPI +from typing_extensions import Annotated +from src.models.request import Request + +class Routes: + def __init__(self): + self.api = FastAPI() + + @api.get('/') + async def index(self): + return {'message': 'Hello World!'} + +api = FastAPI() + + + +@api.post('/query') +async def query(data: Annotated[Request, Body(embed=True)]): + handler = Handler(data.query) + response = handler.tag() + return {'data': response} \ No newline at end of file diff --git a/src/utils/__init__.py b/src/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/utils/__pycache__/__init__.cpython-39.pyc b/src/utils/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fdab59f62db3fafafa4305ec920b22e8e64e29f6 Binary files /dev/null and b/src/utils/__pycache__/__init__.cpython-39.pyc differ diff --git a/src/utils/__pycache__/constants.cpython-39.pyc b/src/utils/__pycache__/constants.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c1309aa3c7c6d297f10eeeae3c34472c0e847b37 Binary files /dev/null and b/src/utils/__pycache__/constants.cpython-39.pyc differ diff --git a/src/utils/__pycache__/identifier.cpython-39.pyc b/src/utils/__pycache__/identifier.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2b3c514bfe4dadcbdf68985e7b1b477b1b6033a Binary files /dev/null and b/src/utils/__pycache__/identifier.cpython-39.pyc differ diff --git a/src/utils/constants.py b/src/utils/constants.py new file mode 100644 index 0000000000000000000000000000000000000000..435a870274a05990c51b56c5cb0c1a6e22155ef3 --- /dev/null +++ b/src/utils/constants.py @@ -0,0 +1,6 @@ +import os +from definitions import ROOT_DIR + +class Constants: + MODEL_NAME = 'bert-base-multilingual-uncased' + MODEL_PATH = os.path.join(ROOT_DIR, 'static', 'models', MODEL_NAME) \ No newline at end of file diff --git a/src/utils/identifier.py b/src/utils/identifier.py new file mode 100644 index 0000000000000000000000000000000000000000..b4ab646d6e59314328294f06b78887fe3efb3326 --- /dev/null +++ b/src/utils/identifier.py @@ -0,0 +1,24 @@ +import regex + + +""" + This class is used to identify if a string contains any bangla word or not + |-------------------------------------------------------------------------------------------------| + | * This class is written for basic usage, it can be improved dramatically | + | * Changing the for loop with a binary search would result in finding specific bangla word index | + | * Sorting the word chunks based on lexicographic order would also produce better results | + |-------------------------------------------------------------------------------------------------| +""" +class Identifier: + pattern = r"\P{L}*\p{Bengali}+(?:\P{L}+\p{Bengali}+)*\P{L}*" + is_bangla = False + + def __init__(self, query): + self.parts = query.split(' ') + for part in self.parts: + if bool(regex.match(self.pattern, part)): + self.is_bangla = True + break + + def is_bangla(self) -> bool: + return self.is_bangla \ No newline at end of file diff --git a/src/utils/lang/__init__.py b/src/utils/lang/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/utils/lang/bn/bn.json b/src/utils/lang/bn/bn.json new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/utils/lang/en/en.json b/src/utils/lang/en/en.json new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/utils/lang/lang.py b/src/utils/lang/lang.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/.gitignore b/static/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/static/history/2023-09-30.txt b/static/history/2023-09-30.txt new file mode 100644 index 0000000000000000000000000000000000000000..48cea400ca938df4e81e4ed8bd562ad2b5dd79c9 --- /dev/null +++ b/static/history/2023-09-30.txt @@ -0,0 +1,177 @@ +22:50:22 +user_একাত্তরের দিনগুলো বইটি কে লিখছেন? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +22:50:31 +user_জাহানারা ইমাম কে? +chatbot_জাহানারা ইমাম ছিলেন ১৯২৯ সালের ৩ মে বর্তমান পশ্চিমবঙ্গের মুর্শিদাবাদে বড়ঞা থানার অন্তর্ভুক্ত সুন্দরপুর গ্রামে জন্মগ্রহণ করেন। তিনি একজন বাংলাদেশী লেখিকা, কথাসাহিত্যিক, শিক্ষাবিদ এবং একাত্তরের ঘাতক দালাল বিরোধী আন্দোলনের নেত্রী ছিলেন। ১৯৯৪ সালের ২৬ জুন মার্কিন যুক্তরাষ্ট্রের মিশিগানের ডেট্রয়েট নগরীর সাইনাই হাসপাতালে ক্যান্সারে আক্রান্ত হয়ে মৃত্যু বরণ করেন। + +22:50:55 +user_জাহানারা ইমামকে শহীদ জননী বলা হয় কেন? +chatbot_তাঁর ছেলে শাফী ইমাম রুমী দেশের জন্য প্রাণ বিসর্জন দিয়েছিল। বিজয় লাভের পর রুমির বন্ধুরা রুমীর মা জাহানারা ইমামকে সকল মুক্তিযোদ্ধার মা হিসেবে বরণ করে নেয়। তাই তাঁকে "শহীদ জননী" বলে আখ্যায়িত করা হয়। + +22:51:00 +user_রুমী কে? +chatbot_রুমী জাহানারা ইমামের পুত্র। সে মুক্তিযুদ্ধের সময় গেরিলা যুদ্ধে অংশগ্রহণ করেছিলেন এবং শহিদ হয়েছিলেন। + +22:52:25 +user_রুমীর নিয়ে আসা স্টিকারে কি লেখা ছিল? +chatbot_রুমীর নিয়ে আসা স্টিকারে 'একেকটি বাংলা অক্ষর একেকটি বাঙালির জীবন' লেখা ছিল। + +22:52:40 +user_স্টিকারটি কে ডিজাইন করেছিল? +chatbot_স্টিকারটি শিল্পী কামরুল হাসান ডিজাইন করেছিলেন। + +22:59:36 +user_হ্যালো +chatbot_শুভ । আমি শিকু। বলো কি জানতে চাও? + +23:00:45 +user_হ্যালো +chatbot_শুভ । আমি শিকু। বলো কি জানতে চাও? + +23:00:49 +user_হ্যালো +chatbot_শুভ । আমি শিকু। বলো কি জানতে চাও? + +23:04:54 +user_হ্যালো +chatbot_শুভ রাত্রি। আমি শিকু। বলো কি জানতে চাও? + +23:05:01 +user_জাহানারা ইমাম কে? +chatbot_জাহানারা ইমাম ছিলেন ১৯২৯ সালের ৩ মে বর্তমান পশ্চিমবঙ্গের মুর্শিদাবাদে বড়ঞা থানার অন্তর্ভুক্ত সুন্দরপুর গ্রামে জন্মগ্রহণ করেন। তিনি একজন বাংলাদেশী লেখিকা, কথাসাহিত্যিক, শিক্ষাবিদ এবং একাত্তরের ঘাতক দালাল বিরোধী আন্দোলনের নেত্রী ছিলেন। ১৯৯৪ সালের ২৬ জুন মার্কিন যুক্তরাষ্ট্রের মিশিগানের ডেট্রয়েট নগরীর সাইনাই হাসপাতালে ক্যান্সারে আক্রান্ত হয়ে মৃত্যু বরণ করেন। + +23:05:24 +user_শাফী ইমাম রুমী কে? +chatbot_রুমী জাহানারা ইমামের পুত্র। সে মুক্তিযুদ্ধের সময় গেরিলা যুদ্ধে অংশগ্রহণ করেছিলেন এবং শহিদ হয়েছিলেন। + +23:26:24 +user_হ্যালো +chatbot_শুভ রাত্রি। আমি শিকু। বলো কি জানতে চাও? + +23:26:44 +user_আচ্ছা জাহানারা ইয়ামা কে? +chatbot_জাহানারা ইমাম ছিলেন ১৯২৯ সালের ৩ মে বর্তমান পশ্চিমবঙ্গের মুর্শিদাবাদে বড়ঞা থানার অন্তর্ভুক্ত সুন্দরপুর গ্রামে জন্মগ্রহণ করেন। তিনি একজন বাংলাদেশী লেখিকা, কথাসাহিত্যিক, শিক্ষাবিদ এবং একাত্তরের ঘাতক দালাল বিরোধী আন্দোলনের নেত্রী ছিলেন। ১৯৯৪ সালের ২৬ জুন মার্কিন যুক্তরাষ্ট্রের মিশিগানের ডেট্রয়েট নগরীর সাইনাই হাসপাতালে ক্যান্সারে আক্রান্ত হয়ে মৃত্যু বরণ করেন। + +23:26:51 +user_রুমী কে? +chatbot_শুভ রাত্রি। আমি শিকু। বলো কি জানতে চাও? + +23:27:21 +user_শাফী ইমাম রুমী কে? +chatbot_রুমী জাহানারা ইমামের পুত্র। সে মুক্তিযুদ্ধের সময় গেরিলা যুদ্ধে অংশগ্রহণ করেছিলেন এবং শহিদ হয়েছিলেন। + +23:27:52 +user_একাত্তরের দিনগুলো কে লিখেছেন? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +23:28:25 +user_জাহানারা ইমামকে শহীদ জননী বলা হয়ে কেন? +chatbot_তাঁর ছেলে শাফী ইমাম রুমী দেশের জন্য প্রাণ বিসর্জন দিয়েছিল। বিজয় লাভের পর রুমির বন্ধুরা রুমীর মা জাহানারা ইমামকে সকল মুক্তিযোদ্ধার মা হিসেবে বরণ করে নেয়। তাই তাঁকে "শহীদ জননী" বলে আখ্যায়িত করা হয়। + +23:30:15 +user_রুমীর নিয়ে আসা স্টিকারটিতে কি লেখা ছিল? +user_রুমীর নিয়ে আসা স্টিকারটিতে কি লেখা ছিল? +chatbot_রুমীর নিয়ে আসা স্টিকারে 'একেকটি বাংলা অক্ষর একেকটি বাঙালির জীবন' লেখা ছিল। + +23:30:42 +user_স্টিকারটি কে বানিয়েছিল? +chatbot_স্টিকারটি শিল্পী কামরুল হাসান ডিজাইন করেছিলেন। + +23:39:10 +user_একাত্তরের দিনগুলো কে লিখেছেন? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +23:39:20 +user_জাহানারা ইমাম কে? +chatbot_জাহানারা ইমাম ছিলেন ১৯২৯ সালের ৩ মে বর্তমান পশ্চিমবঙ্গের মুর্শিদাবাদে বড়ঞা থানার অন্তর্ভুক্ত সুন্দরপুর গ্রামে জন্মগ্রহণ করেন। তিনি একজন বাংলাদেশী লেখিকা, কথাসাহিত্যিক, শিক্ষাবিদ এবং একাত্তরের ঘাতক দালাল বিরোধী আন্দোলনের নেত্রী ছিলেন। তিনি বাংলাদেশে শহীদ জননী হিসেবে পরিচিত। ১৯৯৪ সালের ২৬ জুন মার্কিন যুক্তরাষ্ট্রের মিশিগানের ডেট্রয়েট নগরীর সাইনাই হাসপাতালে ক্যান্সারে আক্রান্ত হয়ে মৃত্যু বরণ করেন। + +23:39:39 +user_জাহানারা ইমামকে শহীদ জননী বলা হয় কেন? +chatbot_তাঁর ছেলে শাফী ইমাম রুমী দেশের জন্য প্রাণ বিসর্জন দিয়েছিল। বিজয় লাভের পর রুমির বন্ধুরা রুমীর মা জাহানারা ইমামকে সকল মুক্তিযোদ্ধার মা হিসেবে বরণ করে নেয়। তাই তাঁকে "শহীদ জননী" বলে আখ্যায়িত করা হয়। + +23:39:47 +user_শাফী ইমাম রুমী কে? +chatbot_রুমী জাহানারা ইমামের পুত্র। সে মুক্তিযুদ্ধের সময় গেরিলা যুদ্ধে অংশগ্রহণ করেছিলেন এবং শহিদ হয়েছিলেন। + +23:40:04 +user_রুমী নিয়ে আসা স্টিকারে কি লেখা ছিল? +chatbot_রুমীর নিয়ে আসা স্টিকারে 'একেকটি বাংলা অক্ষর একেকটি বাঙালির জীবন' লেখা ছিল। + +23:40:24 +user_স্টিকারটির ডিজাইন কে করেছিলেন? +chatbot_স্টিকারটি শিল্পী কামরুল হাসান ডিজাইন করেছিলেন। + +23:41:04 +user_কামরুল হাসান কি নামে সমিতি গঠন করেছিলেন? +chatbot_কামরুল হাসান 'বাংলা পটুয়া সমাজ' নামে সমিতি গঠন করেছিলেন। + +23:42:37 +user_একাত্তরের দিনগুলো বইটির লেখক কে? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +23:42:49 +user_জাহানারা ইমাম কে +chatbot_জাহানারা ইমাম ছিলেন ১৯২৯ সালের ৩ মে বর্তমান পশ্চিমবঙ্গের মুর্শিদাবাদে বড়ঞা থানার অন্তর্ভুক্ত সুন্দরপুর গ্রামে জন্মগ্রহণ করেন। তিনি একজন বাংলাদেশী লেখিকা, কথাসাহিত্যিক, শিক্ষাবিদ এবং একাত্তরের ঘাতক দালাল বিরোধী আন্দোলনের নেত্রী ছিলেন। তিনি বাংলাদেশে শহীদ জননী হিসেবে পরিচিত। ১৯৯৪ সালের ২৬ জুন মার্কিন যুক্তরাষ্ট্রের মিশিগানের ডেট্রয়েট নগরীর সাইনাই হাসপাতালে ক্যান্সারে আক্রান্ত হয়ে মৃত্যু বরণ করেন। + +23:46:13 +user_হ্যালো +chatbot_শুভ রাত্রি। আমি শিকু। বলো কি জানতে চাও? + +23:46:24 +user_একাত্তরের দিনগুলো কে লিখেছেন? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +23:46:48 +user_আচ্ছা জাহানারা ইয়ামা কে? +chatbot_জাহানারা ইমাম ছিলেন ১৯২৯ সালের ৩ মে বর্তমান পশ্চিমবঙ্গের মুর্শিদাবাদে বড়ঞা থানার অন্তর্ভুক্ত সুন্দরপুর গ্রামে জন্মগ্রহণ করেন। তিনি একজন বাংলাদেশী লেখিকা, কথাসাহিত্যিক, শিক্ষাবিদ এবং একাত্তরের ঘাতক দালাল বিরোধী আন্দোলনের নেত্রী ছিলেন। তিনি বাংলাদেশে শহীদ জননী হিসেবে পরিচিত। ১৯৯৪ সালের ২৬ জুন মার্কিন যুক্তরাষ্ট্রের মিশিগানের ডেট্রয়েট নগরীর সাইনাই হাসপাতালে ক্যান্সারে আক্রান্ত হয়ে মৃত্যু বরণ করেন। + +23:46:59 +user_জাহানারা ইমামকে শহীদ জননী বলা হয়ে কেন? +chatbot_তাঁর ছেলে শাফী ইমাম রুমী দেশের জন্য প্রাণ বিসর্জন দিয়েছিল। বিজয় লাভের পর রুমির বন্ধুরা রুমীর মা জাহানারা ইমামকে সকল মুক্তিযোদ্ধার মা হিসেবে বরণ করে নেয়। তাই তাঁকে "শহীদ জননী" বলে আখ্যায়িত করা হয়। + +23:47:13 +user_শাফী ইমাম রুমী কে? +chatbot_রুমী জাহানারা ইমামের পুত্র। সে মুক্তিযুদ্ধের সময় গেরিলা যুদ্ধে অংশগ্রহণ করেছিলেন এবং শহিদ হয়েছিলেন। + +23:47:22 +user_রুমীর নিয়ে আসা স্টিকারটিতে কি লেখা ছিল? +chatbot_রুমীর নিয়ে আসা স্টিকারে 'একেকটি বাংলা অক্ষর একেকটি বাঙালির জীবন' লেখা ছিল। + +23:47:31 +user_স্টিকারটি কে বানিয়েছিল? +chatbot_স্টিকারটি শিল্পী কামরুল হাসান ডিজাইন করেছিলেন। + +23:55:44 +user_হাই +chatbot_শুভ রাত্রি। আমি শিকু। বলো কি জানতে চাও? + +23:56:03 +user_একাত্তের দিনগুলো বইটি কে লিখেছেন? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +23:56:11 +user_জাহানারা ইমাম কে? +chatbot_জাহানারা ইমাম ছিলেন ১৯২৯ সালের ৩ মে বর্তমান পশ্চিমবঙ্গের মুর্শিদাবাদে বড়ঞা থানার অন্তর্ভুক্ত সুন্দরপুর গ্রামে জন্মগ্রহণ করেন। তিনি একজন বাংলাদেশী লেখিকা, কথাসাহিত্যিক, শিক্ষাবিদ এবং একাত্তরের ঘাতক দালাল বিরোধী আন্দোলনের নেত্রী ছিলেন। তিনি বাংলাদেশে শহীদ জননী হিসেবে পরিচিত। ১৯৯৪ সালের ২৬ জুন মার্কিন যুক্তরাষ্ট্রের মিশিগানের ডেট্রয়েট নগরীর সাইনাই হাসপাতালে ক্যান্সারে আক্রান্ত হয়ে মৃত্যু বরণ করেন। + +23:56:28 +user_তাকে শহীদ জননী বলা হয় কেন? +chatbot_তাঁর ছেলে শাফী ইমাম রুমী দেশের জন্য প্রাণ বিসর্জন দিয়েছিল। বিজয় লাভের পর রুমির বন্ধুরা রুমীর মা জাহানারা ইমামকে সকল মুক্তিযোদ্ধার মা হিসেবে বরণ করে নেয়। তাই তাঁকে "শহীদ জননী" বলে আখ্যায়িত করা হয়। + +23:56:42 +user_শাফী ইমাম রুমী কে? +chatbot_রুমী জাহানারা ইমামের পুত্র। সে মুক্তিযুদ্ধের সময় গেরিলা যুদ্ধে অংশগ্রহণ করেছিলেন এবং শহিদ হয়েছিলেন। + +23:57:00 +user_রুমী যে স্টিকারটি এনেছিল, তাতে কি লেখা চই? +chatbot_রুমীর নিয়ে আসা স্টিকারে 'একেকটি বাংলা অক্ষর একেকটি বাঙালির জীবন' লেখা ছিল। + +23:57:10 +user_স্টিকারটি কে ডিজাইন করেছেন? +chatbot_স্টিকারটি শিল্পী কামরুল হাসান ডিজাইন করেছিলেন। + +23:59:31 +user_কামরুল হাসান যে সমিতি গঠন করেছিলেন তার নাম কি? +chatbot_কামরুল হাসান 'বাংলা পটুয়া সমাজ' নামে সমিতি গঠন করেছিলেন। + diff --git a/static/history/2023-10-01.txt b/static/history/2023-10-01.txt new file mode 100644 index 0000000000000000000000000000000000000000..47a25425f7f974c27397b90d7dc20a9eb067a0a1 --- /dev/null +++ b/static/history/2023-10-01.txt @@ -0,0 +1,56 @@ +00:12:31 +user_হ্যালো +chatbot_শুভ রাত্রি। আমি শিকু। বলো কি জানতে চাও? + +00:12:45 +user_একাত্তরের দিনগুলো কে লিখেছেন? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +14:45:29 +user_হ্যালো +chatbot_শুভ বিকাল। আমি শিকু। বলো কি জানতে চাও? + +14:45:51 +user_একাত্তরের দিনগুলি বইটি কে লিখেছেন? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +14:46:12 +user_জাহানারা ইমাম কে? +chatbot_জাহানারা ইমাম ছিলেন ১৯২৯ সালের ৩ মে বর্তমান পশ্চিমবঙ্গের মুর্শিদাবাদে বড়ঞা থানার অন্তর্ভুক্ত সুন্দরপুর গ্রামে জন্মগ্রহণ করেন। তিনি একজন বাংলাদেশী লেখিকা, কথাসাহিত্যিক, শিক্ষাবিদ এবং একাত্তরের ঘাতক দালাল বিরোধী আন্দোলনের নেত্রী ছিলেন। তিনি বাংলাদেশে শহীদ জননী হিসেবে পরিচিত। ১৯৯৪ সালের ২৬ জুন মার্কিন যুক্তরাষ্ট্রের মিশিগানের ডেট্রয়েট নগরীর সাইনাই হাসপাতালে ক্যান্সারে আক্রান্ত হয়ে মৃত্যু বরণ করেন। + +14:46:25 +user_জাহানারা ইমামকে কেন শহীদ জননী বলা হয়? +chatbot_তাঁর ছেলে শাফী ইমাম রুমী দেশের জন্য প্রাণ বিসর্জন দিয়েছিল। বিজয় লাভের পর রুমির বন্ধুরা রুমীর মা জাহানারা ইমামকে সকল মুক্তিযোদ্ধার মা হিসেবে বরণ করে নেয়। তাই তাঁকে "শহীদ জননী" বলে আখ্যায়িত করা হয়। + +14:46:36 +user_শাফী ইমাম রুমী কে? +chatbot_রুমী জাহানারা ইমামের পুত্র। সে মুক্তিযুদ্ধের সময় গেরিলা যুদ্ধে অংশগ্রহণ করেছিলেন এবং শহিদ হয়েছিলেন। + +14:47:39 +user_হ্যালো +chatbot_শুভ বিকাল। আমি শিকু। বলো কি জানতে চাও? + +14:50:03 +user_হ্যালো +chatbot_শুভ বিকাল। আমি শিকু। বলো কি জানতে চাও? + +14:50:45 +user_একাত্তরের দিনগুলি কে লিখেছেন? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +14:50:59 +user_জাহানারা ইমাম কে ছিলেন? +chatbot_জাহানারা ইমাম ছিলেন ১৯২৯ সালের ৩ মে বর্তমান পশ্চিমবঙ্গের মুর্শিদাবাদে বড়ঞা থানার অন্তর্ভুক্ত সুন্দরপুর গ্রামে জন্মগ্রহণ করেন। তিনি একজন বাংলাদেশী লেখিকা, কথাসাহিত্যিক, শিক্ষাবিদ এবং একাত্তরের ঘাতক দালাল বিরোধী আন্দোলনের নেত্রী ছিলেন। তিনি বাংলাদেশে শহীদ জননী হিসেবে পরিচিত। ১৯৯৪ সালের ২৬ জুন মার্কিন যুক্তরাষ্ট্রের মিশিগানের ডেট্রয়েট নগরীর সাইনাই হাসপাতালে ক্যান্সারে আক্রান্ত হয়ে মৃত্যু বরণ করেন। + +14:51:48 +user_জাহানারা ইমামকে শহীদ জননী কেন বলা হয়? +chatbot_তাঁর ছেলে শাফী ইমাম রুমী দেশের জন্য প্রাণ বিসর্জন দিয়েছিল। বিজয় লাভের পর রুমির বন্ধুরা রুমীর মা জাহানারা ইমামকে সকল মুক্তিযোদ্ধার মা হিসেবে বরণ করে নেয়। তাই তাঁকে "শহীদ জননী" বলে আখ্যায়িত করা হয়। + +14:56:40 +user_শাফী ইমাম রুমী কে? +chatbot_রুমী জাহানারা ইমামের পুত্র। সে মুক্তিযুদ্ধের সময় গেরিলা যুদ্ধে অংশগ্রহণ করেছিলেন এবং শহিদ হয়েছিলেন। + +14:57:42 +user_এটি কোন বিষয় নিয়ে লেখা হয়েছে? +chatbot_এটি মুক্তিযুদ্ধের সময়ের প্রতিদিনের ঘটনা নিয়ে লেখা হয়েছে। + diff --git a/static/history/2023-10-20.txt b/static/history/2023-10-20.txt new file mode 100644 index 0000000000000000000000000000000000000000..c31121bf693ed789042a42b7bd2190efb6497292 --- /dev/null +++ b/static/history/2023-10-20.txt @@ -0,0 +1,8 @@ +17:42:39 +user_হ্যালো +chatbot_শুভ সন্ধ্যা। আমি শিকু। বলো কি জানতে চাও? + +22:46:25 +user_একাত্তরের দিনগুলি বইটির লেখক কে? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + diff --git a/static/history/2023-10-21.txt b/static/history/2023-10-21.txt new file mode 100644 index 0000000000000000000000000000000000000000..375f693ed6641c85bb2250da7c9ff3ba90cf3da2 --- /dev/null +++ b/static/history/2023-10-21.txt @@ -0,0 +1,32 @@ +00:18:01 +user_একাত্তরের দিনগুলি বইটির লেখক কে? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +00:30:18 +user_একাত্তরের দিনগুলি বইটির লেখক কে? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +01:44:46 +user_একাত্তরের দিনগুলি বইটির লেখক কে? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +01:50:20 +user_একাত্তরের দিনগুলি বইটির লেখক কে? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +01:56:53 +user_একাত্তরের দিনগুলি বইটির লেখক কে? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +01:57:20 +user_একাত্তরের দিনগুলি বইটির লেখক কে? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +01:57:46 +user_একাত্তরের দিনগুলি বইটির লেখক কে? +chatbot_একাত্তরের দিনগুলি বইটি জাহানারা ইমাম লিখেছেন। + +01:58:58 +user_রুমীর নিয়ে আসা স্টিকারে কি লেখা ছিল? +chatbot_রুমীর নিয়ে আসা স্টিকারে 'একেকটি বাংলা অক্ষর একেকটি বাঙালির জীবন' লেখা ছিল। + diff --git a/static/images/shiku.jpg b/static/images/shiku.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2cf5bb9c0541a05fb28ee62323c01b0702b19c09 Binary files /dev/null and b/static/images/shiku.jpg differ diff --git a/static/images/shiku_half 2.jpg b/static/images/shiku_half 2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc8a9d221a3374d9f66a66cda44478285f8560cc Binary files /dev/null and b/static/images/shiku_half 2.jpg differ diff --git a/static/images/shiku_half.png b/static/images/shiku_half.png new file mode 100644 index 0000000000000000000000000000000000000000..298f2d471f5f7435212282f9987d844bdbf48592 Binary files /dev/null and b/static/images/shiku_half.png differ diff --git a/static/images/shiku_with_name.png b/static/images/shiku_with_name.png new file mode 100644 index 0000000000000000000000000000000000000000..3be77b5ce66ff4e05814de7979024590169dff22 Binary files /dev/null and b/static/images/shiku_with_name.png differ diff --git a/static/knowledge_base/chatbot_queries_v1_bn.json b/static/knowledge_base/chatbot_queries_v1_bn.json new file mode 100644 index 0000000000000000000000000000000000000000..94701300d5ffdc2697a1040eefd5aa685cd9d6dc --- /dev/null +++ b/static/knowledge_base/chatbot_queries_v1_bn.json @@ -0,0 +1 @@ +{"0": {"0": ["\u098f\u0995\u09be\u09a4\u09cd\u09a4\u09b0\u09c7\u09b0 \u09a6\u09bf\u09a8\u0997\u09c1\u09b2\u09bf \u09ac\u0987\u099f\u09bf \u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae \u09b2\u09bf\u0996\u09c7\u099b\u09c7\u09a8\u0964"]}, "1": {"0": ["\u09b0\u09c1\u09ae\u09c0 \u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae\u09c7\u09b0 \u09aa\u09c1\u09a4\u09cd\u09b0\u0964 \u09b8\u09c7 \u09ae\u09c1\u0995\u09cd\u09a4\u09bf\u09af\u09c1\u09a6\u09cd\u09a7\u09c7\u09b0 \u09b8\u09ae\u09df \u0997\u09c7\u09b0\u09bf\u09b2\u09be \u09af\u09c1\u09a6\u09cd\u09a7\u09c7 \u0985\u0982\u09b6\u0997\u09cd\u09b0\u09b9\u09a3 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8 \u098f\u09ac\u0982 \u09b6\u09b9\u09bf\u09a6 \u09b9\u09df\u09c7\u099b\u09bf\u09b2\u09c7\u09a8\u0964"]}, "2": {"0": ["\u09b0\u09c1\u09ae\u09c0\u09b0 \u09a8\u09bf\u09df\u09c7 \u0986\u09b8\u09be \u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u09c7 '\u098f\u0995\u09c7\u0995\u099f\u09bf \u09ac\u09be\u0982\u09b2\u09be \u0985\u0995\u09cd\u09b7\u09b0 \u098f\u0995\u09c7\u0995\u099f\u09bf \u09ac\u09be\u0999\u09be\u09b2\u09bf\u09b0 \u099c\u09c0\u09ac\u09a8' \u09b2\u09c7\u0996\u09be \u099b\u09bf\u09b2\u0964"]}, "3": {"0": ["\u098f\u099f\u09bf \u09ae\u09c1\u0995\u09cd\u09a4\u09bf\u09af\u09c1\u09a6\u09cd\u09a7\u09c7\u09b0 \u09b8\u09ae\u09df\u09c7\u09b0 \u09aa\u09cd\u09b0\u09a4\u09bf\u09a6\u09bf\u09a8\u09c7\u09b0 \u0998\u099f\u09a8\u09be \u09a8\u09bf\u09df\u09c7 \u09b2\u09c7\u0996\u09be \u09b9\u09df\u09c7\u099b\u09c7\u0964"]}, "4": {"0": ["\u09b2\u09c7\u0996\u09be\u099f\u09bf \u09ae\u09c1\u0995\u09cd\u09a4\u09bf\u09af\u09c1\u09a6\u09cd\u09a7\u09c7\u09b0 \u09b8\u09ae\u09df\u09c7\u09b0 \u09e9 \u09a6\u09bf\u09a8\u09c7\u09b0 \u0998\u099f\u09a8\u09be\u0964"]}, "5": {"0": ["\u09b2\u09c7\u0996\u09be\u099f\u09bf \u098f\u0995\u099f\u09bf \u09b0\u09cb\u099c\u09a8\u09be\u09ae\u099a\u09be\u09b0 \u0985\u0982\u09b6\u0964 \u09b0\u09cb\u099c\u09a8\u09be\u09ae\u099a\u09be\u09df \u09aa\u09cd\u09b0\u09a4\u09bf\u09a6\u09bf\u09a8\u09c7\u09b0 \u0998\u099f\u09a8\u09be \u09b2\u09bf\u0996\u09c7 \u09b0\u09be\u0996\u09be \u09b9\u09df\u0964 \u09a4\u09be\u0987 \u09b2\u09c7\u0996\u09be\u09b0 \u09aa\u09cd\u09b0\u09a4\u09bf\u099f\u09bf \u0985\u0982\u09b6\u09c7\u09b0 \u09b6\u09c1\u09b0\u09c1\u09a4\u09c7 \u09b8\u09c7\u0987 \u09a6\u09bf\u09a8\u0997\u09c1\u09b2\u09cb\u09b0 \u09a4\u09be\u09b0\u09bf\u0996 \u09a6\u09c7\u0993\u09df\u09be \u0986\u099b\u09c7\u0964"]}, "6": {"0": ["\u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf \u09b6\u09bf\u09b2\u09cd\u09aa\u09c0 \u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 \u09a1\u09bf\u099c\u09be\u0987\u09a8 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8\u0964"]}, "7": {"0": ["\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 '\u09ac\u09be\u0982\u09b2\u09be \u09aa\u099f\u09c1\u09df\u09be \u09b8\u09ae\u09be\u099c' \u09a8\u09be\u09ae\u09c7 \u09b8\u09ae\u09bf\u09a4\u09bf \u0997\u09a0\u09a8 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8\u0964"]}, "8": {"0": ["\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8\u09c7\u09b0 \u0997\u09a0\u09a8 \u0995\u09b0\u09be '\u09ac\u09be\u0982\u09b2\u09be \u09aa\u099f\u09c1\u09df\u09be \u09b8\u09ae\u09be\u099c' \u09b6\u09be\u09aa\u09b2\u09be \u09ab\u09c1\u09b2\u0995\u09c7 \u09b8\u0982\u0997\u09cd\u09b0\u09be\u09ae\u09c0 \u09ac\u09be\u0982\u09b2\u09be \u09aa\u09cd\u09b0\u09a4\u09c0\u0995 \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u0997\u09cd\u09b0\u09b9\u09a3 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u0964 "]}, "9": {"0": ["\u09aa\u09cd\u09b0\u09a4\u09bf\u09b0\u09cb\u09a7 \u09a6\u09bf\u09ac\u09b8\u09c7 \u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae \u0995\u09be\u09b2\u09cb \u09aa\u09a4\u09be\u0995\u09be \u0993 \u09b8\u09cd\u09ac\u09be\u09a7\u09c0\u09a8 \u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6\u09c7\u09b0 \u09aa\u09a4\u09be\u0995\u09be \u0989\u09dc\u09bf\u09df\u09c7\u099b\u09bf\u09b2\u09c7\u09a8\u0964"]}, "10": {"0": ["\u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae \u099b\u09bf\u09b2\u09c7\u09a8 \u09e7\u09ef\u09e8\u09ef \u09b8\u09be\u09b2\u09c7\u09b0 \u09e9 \u09ae\u09c7 \u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8 \u09aa\u09b6\u09cd\u099a\u09bf\u09ae\u09ac\u0999\u09cd\u0997\u09c7\u09b0 \u09ae\u09c1\u09b0\u09cd\u09b6\u09bf\u09a6\u09be\u09ac\u09be\u09a6\u09c7 \u09ac\u09a1\u09bc\u099e\u09be \u09a5\u09be\u09a8\u09be\u09b0 \u0985\u09a8\u09cd\u09a4\u09b0\u09cd\u09ad\u09c1\u0995\u09cd\u09a4 \u09b8\u09c1\u09a8\u09cd\u09a6\u09b0\u09aa\u09c1\u09b0 \u0997\u09cd\u09b0\u09be\u09ae\u09c7 \u099c\u09a8\u09cd\u09ae\u0997\u09cd\u09b0\u09b9\u09a3 \u0995\u09b0\u09c7\u09a8\u0964 \u09a4\u09bf\u09a8\u09bf \u098f\u0995\u099c\u09a8 \u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6\u09c0 \u09b2\u09c7\u0996\u09bf\u0995\u09be, \u0995\u09a5\u09be\u09b8\u09be\u09b9\u09bf\u09a4\u09cd\u09af\u09bf\u0995, \u09b6\u09bf\u0995\u09cd\u09b7\u09be\u09ac\u09bf\u09a6 \u098f\u09ac\u0982 \u098f\u0995\u09be\u09a4\u09cd\u09a4\u09b0\u09c7\u09b0 \u0998\u09be\u09a4\u0995 \u09a6\u09be\u09b2\u09be\u09b2 \u09ac\u09bf\u09b0\u09cb\u09a7\u09c0 \u0986\u09a8\u09cd\u09a6\u09cb\u09b2\u09a8\u09c7\u09b0 \u09a8\u09c7\u09a4\u09cd\u09b0\u09c0 \u099b\u09bf\u09b2\u09c7\u09a8\u0964 \u09a4\u09bf\u09a8\u09bf \u09ac\u09be\u0982\u09b2\u09be\u09a6\u09c7\u09b6\u09c7 \u09b6\u09b9\u09c0\u09a6 \u099c\u09a8\u09a8\u09c0 \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u09aa\u09b0\u09bf\u099a\u09bf\u09a4\u0964 \u09e7\u09ef\u09ef\u09ea \u09b8\u09be\u09b2\u09c7\u09b0 \u09e8\u09ec \u099c\u09c1\u09a8 \u09ae\u09be\u09b0\u09cd\u0995\u09bf\u09a8 \u09af\u09c1\u0995\u09cd\u09a4\u09b0\u09be\u09b7\u09cd\u099f\u09cd\u09b0\u09c7\u09b0 \u09ae\u09bf\u09b6\u09bf\u0997\u09be\u09a8\u09c7\u09b0 \u09a1\u09c7\u099f\u09cd\u09b0\u09af\u09bc\u09c7\u099f \u09a8\u0997\u09b0\u09c0\u09b0 \u09b8\u09be\u0987\u09a8\u09be\u0987 \u09b9\u09be\u09b8\u09aa\u09be\u09a4\u09be\u09b2\u09c7 \u0995\u09cd\u09af\u09be\u09a8\u09cd\u09b8\u09be\u09b0\u09c7 \u0986\u0995\u09cd\u09b0\u09be\u09a8\u09cd\u09a4 \u09b9\u09af\u09bc\u09c7 \u09ae\u09c3\u09a4\u09cd\u09af\u09c1 \u09ac\u09b0\u09a3 \u0995\u09b0\u09c7\u09a8\u0964"]}, "11": {"0": ["\u09a4\u09be\u0981\u09b0 \u099b\u09c7\u09b2\u09c7 \u09b6\u09be\u09ab\u09c0 \u0987\u09ae\u09be\u09ae \u09b0\u09c1\u09ae\u09c0 \u09a6\u09c7\u09b6\u09c7\u09b0 \u099c\u09a8\u09cd\u09af \u09aa\u09cd\u09b0\u09be\u09a3 \u09ac\u09bf\u09b8\u09b0\u09cd\u099c\u09a8 \u09a6\u09bf\u09af\u09bc\u09c7\u099b\u09bf\u09b2\u0964 \u09ac\u09bf\u099c\u09af\u09bc \u09b2\u09be\u09ad\u09c7\u09b0 \u09aa\u09b0 \u09b0\u09c1\u09ae\u09bf\u09b0 \u09ac\u09a8\u09cd\u09a7\u09c1\u09b0\u09be \u09b0\u09c1\u09ae\u09c0\u09b0 \u09ae\u09be \u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae\u0995\u09c7 \u09b8\u0995\u09b2 \u09ae\u09c1\u0995\u09cd\u09a4\u09bf\u09af\u09cb\u09a6\u09cd\u09a7\u09be\u09b0 \u09ae\u09be \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u09ac\u09b0\u09a3 \u0995\u09b0\u09c7 \u09a8\u09c7\u09af\u09bc\u0964 \u09a4\u09be\u0987 \u09a4\u09be\u0981\u0995\u09c7 \"\u09b6\u09b9\u09c0\u09a6 \u099c\u09a8\u09a8\u09c0\" \u09ac\u09b2\u09c7 \u0986\u0996\u09cd\u09af\u09be\u09af\u09bc\u09bf\u09a4 \u0995\u09b0\u09be \u09b9\u09af\u09bc\u0964"]}, "12": {"0": ["\u09b6\u09c1\u09ad \u0964 \u0986\u09ae\u09bf \u09b6\u09bf\u0995\u09c1\u0964 \u09ac\u09b2\u09cb \u0995\u09bf \u099c\u09be\u09a8\u09a4\u09c7 \u099a\u09be\u0993? "]}, "13": {"0": ["\u09b6\u09c1\u09ad \u0964 \u0986\u09ae\u09bf \u09b6\u09bf\u0995\u09c1\u0964 \u09ac\u09b2\u09cb \u0995\u09bf \u099c\u09be\u09a8\u09a4\u09c7 \u099a\u09be\u0993? "]}, "14": {"0": ["\u09b6\u09c1\u09ad \u0964 \u0986\u09ae\u09bf \u09b6\u09bf\u0995\u09c1\u0964 \u09ac\u09b2\u09cb \u0995\u09bf \u099c\u09be\u09a8\u09a4\u09c7 \u099a\u09be\u0993? "]}, "15": {"0": ["\u09b6\u09c1\u09ad \u0964 \u0986\u09ae\u09bf \u09b6\u09bf\u0995\u09c1\u0964 \u09ac\u09b2\u09cb \u0995\u09bf \u099c\u09be\u09a8\u09a4\u09c7 \u099a\u09be\u0993? "]}, "16": {"0": ["\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 \u098f\u0995\u099c\u09a8 \u09b6\u09bf\u09b2\u09cd\u09aa\u09c0 \u099b\u09bf\u09b2\u09c7\u09a8\u0964 \u09a4\u09bf\u09a8\u09bf \u09e7\u09ef\u09e8\u09e7 \u09b8\u09be\u09b2\u09c7\u09b0 \u09e8 \u09a1\u09bf\u09b8\u09c7\u09ae\u09cd\u09ac\u09b0 \u099c\u09a8\u09cd\u09ae \u0997\u09cd\u09b0\u09b9\u09a3 \u0995\u09b0\u09c7\u09a8\u0964 \u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8\u0995\u09c7 \u09b8\u09ac\u09be\u0987 \u09b6\u09bf\u09b2\u09cd\u09aa\u09c0 \u09ac\u09b2\u09b2\u09c7\u0993 \u09a4\u09bf\u09a8\u09bf \u09a8\u09bf\u099c\u09c7 '\u09aa\u099f\u09c1\u09af\u09bc\u09be' \u09a8\u09be\u09ae\u09c7 \u09aa\u09b0\u09bf\u099a\u09bf\u09a4 \u09b9\u09a4\u09c7 \u09aa\u099b\u09a8\u09cd\u09a6 \u0995\u09b0\u09a4\u09c7\u09a8\u0964 \u09a4\u09bf\u09a8\u09bf \u098f\u0987 \u09a8\u09be\u09ae\u09c7 \u098f\u0995\u099f\u09bf \u09b8\u09ae\u09bf\u09a4\u09bf\u0993 \u0997\u09a0\u09a8 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8\u0964 \u09a4\u09bf\u09a8\u09bf \u09e7\u09ef\u09ee\u09ee \u09b8\u09be\u09b2\u09c7\u09b0 \u09e8 \u09ab\u09c7\u09ac\u09cd\u09b0\u09c1\u09af\u09bc\u09be\u09b0\u09bf \u09ae\u09c3\u09a4\u09cd\u09af\u09c1 \u09ac\u09b0\u09a3 \u0995\u09b0\u09c7\u09a8\u0964"]}} \ No newline at end of file diff --git a/static/knowledge_base/user_queries_v1_bn.json b/static/knowledge_base/user_queries_v1_bn.json new file mode 100644 index 0000000000000000000000000000000000000000..7a334f2102236c7841a839537708c607f9d16ba4 --- /dev/null +++ b/static/knowledge_base/user_queries_v1_bn.json @@ -0,0 +1 @@ +{"0": {"0": ["\u098f\u0995\u09be\u09a4\u09cd\u09a4\u09b0\u09c7\u09b0 \u09a6\u09bf\u09a8\u0997\u09c1\u09b2\u09bf \u09ac\u0987\u099f\u09bf\u09b0 \u09b2\u09c7\u0996\u0995 \u0995\u09c7?", "\u098f\u0995\u09be\u09a4\u09cd\u09a4\u09b0\u09c7\u09b0 \u09a6\u09bf\u09a8\u0997\u09c1\u09b2\u09bf \u09ac\u0987\u099f\u09bf \u0995\u09c7 \u09b2\u09bf\u0996\u09c7\u099b\u09c7\u09a8?", "\u098f\u0995\u09be\u09a4\u09cd\u09a4\u09b0\u09c7\u09b0 \u09a6\u09bf\u09a8\u0997\u09c1\u09b2\u09bf \u09ac\u0987\u099f\u09bf\u09b0 \u09b0\u099a\u09af\u09bc\u09bf\u09a4\u09be \u0995\u09c7?", "\u098f\u0995\u09be\u09a4\u09cd\u09a4\u09b0\u09c7\u09b0 \u09a6\u09bf\u09a8\u0997\u09c1\u09b2\u09bf \u09ac\u0987\u099f\u09bf\u09b0 \u09aa\u09cd\u09b0\u09a3\u09c7\u09a4\u09be \u0995\u09c7?", "\u098f\u0995\u09be\u09a4\u09cd\u09a4\u09b0\u09c7\u09b0 \u09a6\u09bf\u09a8\u0997\u09c1\u09b2\u09bf \u09ac\u0987\u099f\u09bf\u09b0 \u09b2\u09c7\u0996\u0995\u09c7\u09b0 \u09a8\u09be\u09ae \u0995\u09c0?", "\u098f\u0995\u09be\u09a4\u09cd\u09a4\u09b0\u09c7\u09b0 \u09a6\u09bf\u09a8\u0997\u09c1\u09b2\u09bf \u09ac\u0987\u099f\u09bf \u0995\u09be\u09b0 \u09b2\u09c7\u0996\u09be?"]}, "1": {"0": ["\u09b6\u09be\u09ab\u09c0 \u0987\u09ae\u09be\u09ae \u09b0\u09c1\u09ae\u09c0 \u0995\u09c7?", "\u09b6\u09b9\u09c0\u09a6 \u09b6\u09be\u09ab\u09c0 \u0987\u09ae\u09be\u09ae \u09b0\u09c1\u09ae\u09c0 \u0995\u09c7?", "\u09ae\u09c1\u0995\u09cd\u09a4\u09bf\u09af\u09cb\u09a6\u09cd\u09a7\u09be \u09b6\u09be\u09ab\u09c0 \u0987\u09ae\u09be\u09ae \u09b0\u09c1\u09ae\u09c0 \u0995\u09c7?", "\u09b0\u09c1\u09ae\u09c0 \u0995\u09c7?"]}, "2": {"0": ["\u09b0\u09c1\u09ae\u09c0\u09b0 \u09a8\u09bf\u09df\u09c7 \u0986\u09b8\u09be \u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u09c7 \u0995\u09bf \u09b2\u09c7\u0996\u09be \u099b\u09bf\u09b2?", "\u09b0\u09c1\u09ae\u09bf \u09af\u09c7 \u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0 \u09a8\u09bf\u09df\u09c7 \u098f\u09b8\u09c7\u099b\u09bf\u09b2 \u09a4\u09be\u09a4\u09c7 \u0995\u09c0 \u09b2\u09c7\u0996\u09be \u099b\u09bf\u09b2?", "\u09b0\u09c1\u09ae\u09bf \u09af\u09c7 \u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf \u09a8\u09bf\u09df\u09c7 \u098f\u09b8\u09c7\u099b\u09bf\u09b2 \u09a4\u09be\u09b0 \u0989\u09aa\u09b0 \u0995\u09c0 \u09b2\u09c7\u0996\u09be \u099b\u09bf\u09b2?", "\u09b0\u09c1\u09ae\u09bf \u09af\u09c7 \u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf \u09a8\u09bf\u09df\u09c7 \u098f\u09b8\u09c7\u099b\u09bf\u09b2 \u09a4\u09be\u09a4\u09c7 \u0995\u09c0 \u09b2\u09c7\u0996\u09be \u099b\u09bf\u09b2 \u09a4\u09be \u0995\u09bf \u099c\u09be\u09a8\u09cb?", "\u09b0\u09c1\u09ae\u09bf \u09af\u09c7 \u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf \u09a8\u09bf\u09df\u09c7 \u098f\u09b8\u09c7\u099b\u09bf\u09b2 \u09a4\u09be\u09b0 \u09b2\u09c7\u0996\u09be \u0995\u09c0 \u099b\u09bf\u09b2?", "\u09b0\u09c1\u09ae\u09bf \u09af\u09c7 \u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf \u09a8\u09bf\u09df\u09c7 \u098f\u09b8\u09c7\u099b\u09bf\u09b2 \u09a4\u09be\u09b0 \u0989\u09aa\u09b0 \u0995\u09c0 \u09b2\u09c7\u0996\u09be \u099b\u09bf\u09b2 \u09a4\u09be \u0995\u09bf \u09a4\u09c1\u09ae\u09bf \u09ac\u09b2\u09a4\u09c7 \u09aa\u09be\u09b0\u09cb?"]}, "3": {"0": ["\u098f\u099f\u09bf \u0995\u09cb\u09a8 \u09ac\u09bf\u09b7\u09df \u09a8\u09bf\u09df\u09c7 \u09b2\u09c7\u0996\u09be \u09b9\u09df\u09c7\u099b\u09c7?", "\u098f\u0987 \u09b2\u09c7\u0996\u09be\u099f\u09bf \u0995\u09c0 \u09ac\u09bf\u09b7\u09af\u09bc\u09c7 \u09b2\u09c7\u0996\u09be \u09b9\u09af\u09bc\u09c7\u099b\u09c7?", "\u098f\u0987 \u09b2\u09c7\u0996\u09be\u099f\u09bf\u09b0 \u09ac\u09bf\u09b7\u09af\u09bc\u09ac\u09b8\u09cd\u09a4\u09c1 \u0995\u09c0?", "\u098f\u0987 \u09b2\u09c7\u0996\u09be\u099f\u09bf \u0995\u09c0 \u09b8\u09ae\u09cd\u09aa\u09b0\u09cd\u0995\u09c7?", "\u098f\u0987 \u09b2\u09c7\u0996\u09be\u099f\u09bf\u09b0 \u09ae\u09c2\u09b2 \u09ac\u09bf\u09b7\u09af\u09bc \u0995\u09c0?", "\u098f\u0987 \u09b2\u09c7\u0996\u09be\u099f\u09bf \u0995\u09cb\u09a8 \u09ac\u09bf\u09b7\u09af\u09bc\u0995\u09c7 \u0986\u09b2\u09cb\u0995\u09aa\u09be\u09a4 \u0995\u09b0\u09c7?"]}, "4": {"0": ["\u09b2\u09c7\u0996\u09be\u099f\u09bf \u0995\u09cb\u09a8 \u09b8\u09ae\u09df\u09c7\u09b0 \u098f\u09ac\u0982 \u0995\u09a4 \u09a6\u09bf\u09a8\u09c7\u09b0 \u0998\u099f\u09a8\u09be?", "\u09b2\u09c7\u0996\u09be\u099f\u09bf \u0995\u09cb\u09a8 \u09b8\u09ae\u09af\u09bc\u0995\u09be\u09b2\u09c7\u09b0 \u098f\u09ac\u0982 \u0995\u09a4 \u09a6\u09bf\u09a8\u09c7\u09b0 \u0998\u099f\u09a8\u09be?", "\u09b2\u09c7\u0996\u09be\u099f\u09bf \u0995\u09cb\u09a8 \u09b8\u09ae\u09af\u09bc\u09c7\u09b0 \u098f\u09ac\u0982 \u0995\u09a4 \u09a6\u09bf\u09a8\u09c7\u09b0 \u0998\u099f\u09a8\u09be\u09ac\u09b2\u09bf \u09b8\u09ae\u09cd\u09aa\u09b0\u09cd\u0995\u09c7?", "\u09b2\u09c7\u0996\u09be\u099f\u09bf \u0995\u09cb\u09a8 \u09b8\u09ae\u09af\u09bc\u0995\u09be\u09b2\u09c7 \u098f\u09ac\u0982 \u0995\u09a4 \u09a6\u09bf\u09a8 \u09a7\u09b0\u09c7 \u0998\u099f\u09c7\u099b\u09bf\u09b2?", "\u09b2\u09c7\u0996\u09be\u099f\u09bf \u0995\u09cb\u09a8 \u09b8\u09ae\u09af\u09bc\u09c7\u09b0 \u098f\u09ac\u0982 \u0995\u09a4 \u09a6\u09bf\u09a8\u09c7\u09b0 \u0998\u099f\u09a8\u09be\u09b0 \u09ac\u09b0\u09cd\u09a3\u09a8\u09be \u09a6\u09c7\u09af\u09bc?", "\u09b2\u09c7\u0996\u09be\u099f\u09bf \u0995\u09cb\u09a8 \u09b8\u09ae\u09af\u09bc\u09c7\u09b0 \u098f\u09ac\u0982 \u0995\u09a4 \u09a6\u09bf\u09a8\u09c7\u09b0 \u0998\u099f\u09a8\u09be\u09b0 \u09ac\u09bf\u09ac\u09b0\u09a3 \u09a6\u09c7\u09af\u09bc?"]}, "5": {"0": ["\u09b2\u09c7\u0996\u09be\u09b0 \u09a4\u09bf\u09a8 \u0985\u0982\u09b6\u09c7\u09b0 \u09b6\u09c1\u09b0\u09c1\u09a4\u09c7 \u09a4\u09be\u09b0\u09bf\u0996 \u09a6\u09c7\u0993\u09af\u09be \u0995\u09c7\u09a8?"]}, "6": {"0": ["\u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf \u0995\u09c7 \u09a1\u09bf\u099c\u09be\u0987\u09a8 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8?", "\u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf\u09b0 \u09a8\u0995\u09b6\u09be\u0995\u09be\u09b0 \u0995\u09c7", "\u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf\u09b0 \u09a1\u09bf\u099c\u09be\u0987\u09a8\u09be\u09b0 \u0995\u09c7?", "\u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf \u0995\u09c7 \u09a4\u09c8\u09b0\u09bf \u0995\u09b0\u09c7\u099b\u09c7\u09a8?", "\u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf\u09b0 \u09b8\u09cd\u09b0\u09b7\u09cd\u099f\u09be \u0995\u09c7?", "\u09b8\u09cd\u099f\u09bf\u0995\u09be\u09b0\u099f\u09bf \u0995\u09c7 \u09a8\u0995\u09b6\u09be \u0995\u09b0\u09c7\u099b\u09c7\u09a8?"]}, "7": {"0": ["\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 \u0995\u09bf \u09a8\u09be\u09ae\u09c7 \u09b8\u09ae\u09bf\u09a4\u09bf \u0997\u09a0\u09a8 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8?", "\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8\u09c7\u09b0 \u0997\u09a0\u09bf\u09a4 \u09b8\u09ae\u09bf\u09a4\u09bf\u09b0 \u09a8\u09be\u09ae \u0995\u09c0?", "\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 \u0995\u09cb\u09a8 \u09a8\u09be\u09ae\u09c7 \u09b8\u09ae\u09bf\u09a4\u09bf \u0997\u09a0\u09a8 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8?", "\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8\u09c7\u09b0 \u0997\u09a0\u09bf\u09a4 \u09b8\u09ae\u09bf\u09a4\u09bf\u09b0 \u09a8\u09be\u09ae\u099f\u09bf \u0995\u09c0?", "\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 \u0995\u09bf \u09a8\u09be\u09ae\u09c7 \u098f\u0995\u099f\u09bf \u09b8\u09ae\u09bf\u09a4\u09bf \u0997\u09a0\u09a8 \u0995\u09b0\u09c7\u099b\u09bf\u09b2\u09c7\u09a8?", "\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 \u0997\u09a0\u09bf\u09a4 \u09b8\u09ae\u09bf\u09a4\u09bf\u09b0 \u09a8\u09be\u09ae \u0995\u09c0 \u099b\u09bf\u09b2?"]}, "8": {"0": ["\u0995\u09be\u09b0\u09be \u09b6\u09be\u09aa\u09b2\u09be \u09ab\u09c1\u09b2\u0995\u09c7 \u09b8\u0982\u0997\u09cd\u09b0\u09be\u09ae\u09c0 \u09ac\u09be\u0982\u09b2\u09be\u09b0 \u09aa\u09cd\u09b0\u09a4\u09c0\u0995 \u09b9\u09bf\u09b8\u09c7\u09ac\u09c7 \u0997\u09cd\u09b0\u09b9\u09a3 \u0995\u09b0\u09c7\u099b\u09bf\u09b2?"]}, "9": {"0": ["\u09aa\u09cd\u09b0\u09a4\u09bf\u09b0\u09cb\u09a7 \u09a6\u09bf\u09ac\u09b8\u09c7 \u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae \u09ac\u09be\u09dc\u09bf\u09b0 \u099b\u09be\u09a6\u09c7 \u0995\u09bf \u0995\u09bf \u09aa\u09a4\u09be\u0995\u09be \u0989\u09dc\u09bf\u09df\u09c7\u099b\u09bf\u09b2\u09c7\u09a8?"]}, "10": {"0": ["\u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae \u0995\u09c7 \u099b\u09bf\u09b2\u09c7\u09a8?", "\u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae \u0995\u09c7?", "\u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae\u09c7\u09b0 \u09aa\u09b0\u09bf\u099a\u09df \u0995\u09bf?"]}, "11": {"0": ["\u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae\u0995\u09c7 \u0995\u09c7\u09a8 \u09b6\u09b9\u09c0\u09a6 \u099c\u09a8\u09a8\u09c0 \u09ac\u09b2\u09be \u09b9\u09df?", "\u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae\u0995\u09c7 \u09b6\u09b9\u09c0\u09a6 \u099c\u09a8\u09a8\u09c0 \u09ac\u09b2\u09be \u09b9\u09df \u0995\u09c7\u09a8?", "\u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae\u0995\u09c7 \u09b6\u09b9\u09c0\u09a6 \u099c\u09a8\u09a8\u09c0 \u09ac\u09b2\u09be\u09b0 \u0995\u09be\u09b0\u09a3 \u0995\u09bf?", "\u099c\u09be\u09b9\u09be\u09a8\u09be\u09b0\u09be \u0987\u09ae\u09be\u09ae\u09be\u0995\u09c7 \u0995\u09bf \u0995\u09be\u09b0\u09a3\u09c7 \u09b6\u09b9\u09c0\u09a6 \u099c\u09a8\u09a8\u09c0 \u09ac\u09b2\u09be \u09b9\u09df?"]}, "12": {"0": ["\u09b9\u09cd\u09af\u09be\u09b2\u09cb\u0964", "\u09b9\u09be\u0987\u0964", "\u09b9\u09c7\u0964"]}, "13": {"0": ["\u0997\u09c1\u09a1 \u09ae\u09b0\u09cd\u09a8\u09bf\u0982\u0964", "\u0997\u09c1\u09a1 \u0986\u09ab\u099f\u09be\u09b0\u09a8\u09c1\u09a8\u0964", "\u0997\u09c1\u09a1 \u0987\u09ad\u09c7\u09a8\u09bf\u0982\u0964"]}, "14": {"0": ["\u09b6\u09c1\u09ad \u09b8\u0995\u09be\u09b2\u0964", "\u09b6\u09c1\u09ad \u09a6\u09c1\u09aa\u09c1\u09b0\u0964", "\u09b6\u09c1\u09ad \u09ac\u09bf\u0995\u09be\u09b2\u0964", "\u09b6\u09c1\u09ad \u09b8\u09a8\u09cd\u09a7\u09cd\u09af\u09be\u0964"]}, "15": {"0": ["\u0995\u09c7\u0989 \u0986\u099b\u09cb?", "\u0995\u09c7\u0989 \u0986\u099b\u09c7\u09a8?", "\u0995\u09c7\u0989 \u0986\u099b\u09bf\u09b8?", "\u09b6\u09c1\u09a8\u099b\u09cb?", "\u09b6\u09c1\u09a8\u099b\u09c7\u09a8?"]}, "16": {"0": ["\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 \u0995\u09c7 \u099b\u09bf\u09b2\u09c7\u09a8?", "\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 \u0995\u09c7?", "\u0995\u09be\u09ae\u09b0\u09c1\u09b2 \u09b9\u09be\u09b8\u09be\u09a8 \u098f\u09b0 \u09aa\u09b0\u09bf\u099a\u09df \u0995\u09bf?"]}} \ No newline at end of file diff --git a/static/models/.gitignore b/static/models/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c96a04f008ee21e260b28f7701595ed59e2839e3 --- /dev/null +++ b/static/models/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/test/test.py b/test/test.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391