Testapi / app.py
habulaj's picture
Update app.py
a8a7752 verified
raw
history blame
1.99 kB
import spacy
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from collections import Counter
import re
# Baixar as stopwords do NLTK (se ainda não tiver feito)
nltk.download('punkt')
nltk.download('stopwords')
# Carregar o modelo spaCy para reconhecimento de entidades nomeadas
nlp = spacy.load("en_core_web_sm")
app = FastAPI()
class PostText(BaseModel):
post: str # O post (texto) que será enviado para a API
def clean_text(text):
"""Remove caracteres especiais e faz a limpeza do texto."""
text = re.sub(r'[^\w\s]', '', text) # Remove pontuação
text = text.lower() # Converte para minúsculas
return text
def extract_keywords(text):
"""Extrai palavras-chave usando spaCy e nltk."""
# Limpeza inicial do texto
cleaned_text = clean_text(text)
# Tokenização do texto
words = word_tokenize(cleaned_text)
# Remover stopwords
stop_words = set(stopwords.words("english"))
filtered_words = [word for word in words if word not in stop_words]
# Contar a frequência das palavras filtradas
word_counts = Counter(filtered_words)
# Processar entidades nomeadas com spaCy (ex.: pessoas, locais, eventos)
doc = nlp(text)
entities = [ent.text for ent in doc.ents]
# Juntar as palavras mais frequentes e as entidades encontradas
keywords = set(filtered_words + entities)
# Ordenar e retornar as palavras-chave mais relevantes (top 10)
return [keyword for keyword, _ in word_counts.most_common(10)] + entities[:10]
@app.get("/generate-keywords")
async def generate_keywords(post_text: PostText):
try:
# Gerar as palavras-chave a partir do texto do post
keywords = extract_keywords(post_text.post)
return {"keywords": keywords}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))