feat: implement nlp
Signed-off-by: Sphericalkat <me@kat.bio>
This commit is contained in:
parent
98809e62a4
commit
d8ca41ed3f
29
main.py
29
main.py
@ -2,19 +2,21 @@ import logging
|
|||||||
|
|
||||||
from telegram import Update
|
from telegram import Update
|
||||||
from telegram.ext import (
|
from telegram.ext import (
|
||||||
ContextTypes,
|
|
||||||
ApplicationBuilder,
|
ApplicationBuilder,
|
||||||
CommandHandler,
|
CommandHandler,
|
||||||
|
ContextTypes,
|
||||||
MessageHandler,
|
MessageHandler,
|
||||||
filters,
|
filters,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from nlp import is_noun_follows_verb
|
||||||
from settings import Settings
|
from settings import Settings
|
||||||
|
|
||||||
|
# Load environment variables
|
||||||
settings = Settings()
|
settings = Settings()
|
||||||
|
|
||||||
|
# Set the log level
|
||||||
log_level = logging.getLevelNamesMapping().get(settings.log_level, logging.INFO)
|
log_level = logging.getLevelNamesMapping().get(settings.log_level, logging.INFO)
|
||||||
|
|
||||||
|
|
||||||
logging.basicConfig(
|
logging.basicConfig(
|
||||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=log_level
|
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=log_level
|
||||||
)
|
)
|
||||||
@ -27,10 +29,23 @@ async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
|||||||
|
|
||||||
|
|
||||||
async def message_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
async def message_handler(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
||||||
await context.bot.send_message(
|
# Get the message text content
|
||||||
chat_id=update.effective_chat.id,
|
msg_content = update.effective_message.text
|
||||||
text="I'm sorry, I'm a bot and I can't understand that.",
|
|
||||||
)
|
# Ignore messages without text
|
||||||
|
if not msg_content:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Check that the message doesn't have more than 5 words
|
||||||
|
if len(msg_content.split()) > 5:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Check if a noun immediately follows a verb
|
||||||
|
is_follows_verb, verb = is_noun_follows_verb(msg_content)
|
||||||
|
if is_follows_verb:
|
||||||
|
await update.effective_message.reply_text(f"{verb} deez")
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
23
nlp.py
Normal file
23
nlp.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import spacy
|
||||||
|
|
||||||
|
# Load the English NLP model
|
||||||
|
nlp = spacy.load("en_core_web_sm")
|
||||||
|
|
||||||
|
# Define a function to check if a noun immediately follows a verb
|
||||||
|
def is_noun_follows_verb(text: str) -> bool:
|
||||||
|
doc = nlp(text)
|
||||||
|
for i in range(len(doc) - 1):
|
||||||
|
# Check if the current token is a verb and the next token is a noun
|
||||||
|
if doc[i].pos_ == "VERB" and doc[i + 1].pos_ in ["NOUN", "PROPN", "PRON"]:
|
||||||
|
return True, doc[i].lemma_
|
||||||
|
|
||||||
|
return False, None
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
text = "I was eating pizza"
|
||||||
|
is_follows_verb, verb = is_noun_follows_verb(text)
|
||||||
|
if is_follows_verb:
|
||||||
|
print(f"{verb} deez")
|
||||||
|
else:
|
||||||
|
print("No noun follows a verb in the text")
|
45
requirements.txt
Normal file
45
requirements.txt
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
annotated-types==0.7.0
|
||||||
|
anyio==4.3.0
|
||||||
|
blis==0.7.11
|
||||||
|
catalogue==2.0.10
|
||||||
|
certifi==2024.2.2
|
||||||
|
charset-normalizer==3.3.2
|
||||||
|
click==8.1.7
|
||||||
|
cloudpathlib==0.16.0
|
||||||
|
confection==0.1.4
|
||||||
|
cymem==2.0.8
|
||||||
|
# en-core-web-sm==3.7.1 (from https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl)
|
||||||
|
h11==0.14.0
|
||||||
|
httpcore==1.0.5
|
||||||
|
httpx==0.27.0
|
||||||
|
idna==3.7
|
||||||
|
jinja2==3.1.4
|
||||||
|
langcodes==3.4.0
|
||||||
|
language-data==1.2.0
|
||||||
|
marisa-trie==1.1.1
|
||||||
|
markupsafe==2.1.5
|
||||||
|
murmurhash==1.0.10
|
||||||
|
numpy==1.26.4
|
||||||
|
packaging==24.0
|
||||||
|
pip==24.0
|
||||||
|
preshed==3.0.9
|
||||||
|
pydantic==2.7.1
|
||||||
|
pydantic-core==2.18.2
|
||||||
|
python-telegram-bot==21.2
|
||||||
|
requests==2.32.2
|
||||||
|
setuptools==70.0.0
|
||||||
|
smart-open==6.4.0
|
||||||
|
sniffio==1.3.1
|
||||||
|
spacy==3.7.4
|
||||||
|
https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl
|
||||||
|
spacy-legacy==3.0.12
|
||||||
|
spacy-loggers==1.0.5
|
||||||
|
srsly==2.4.8
|
||||||
|
thinc==8.2.3
|
||||||
|
tqdm==4.66.4
|
||||||
|
typer==0.9.4
|
||||||
|
typing-extensions==4.12.0
|
||||||
|
urllib3==2.2.1
|
||||||
|
wasabi==1.1.2
|
||||||
|
weasel==0.3.4
|
||||||
|
wheel==0.43.0
|
Loading…
Reference in New Issue
Block a user