File size: 1,988 Bytes
a8a7752 4b2ecc5 eef708d a8a7752 4b2ecc5 a8a7752 4b2ecc5 a8a7752 1aab113 a8a7752 0e69a3b a8a7752 1aab113 a8a7752 3231e07 a8a7752 3231e07 a8a7752 3231e07 a8a7752 3231e07 a8a7752 3231e07 a8a7752 0e69a3b a8a7752 3231e07 a8a7752 d77e4f1 a8a7752 3231e07 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
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))
|