habulaj commited on
Commit
83568a6
·
verified ·
1 Parent(s): 903eeb7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -56
app.py CHANGED
@@ -1,68 +1,36 @@
1
- import spacy
2
  from fastapi import FastAPI, HTTPException
3
  from pydantic import BaseModel
4
- from nltk.tokenize import word_tokenize
5
- from nltk.corpus import stopwords
6
- from collections import Counter
7
- import re
8
- import os
9
- import nltk
10
-
11
- # Definir um diretório local para armazenar dados do NLTK
12
- os.environ['NLTK_DATA'] = './nltk_data' # Dentro do diretório do projeto, por exemplo
13
-
14
- # Baixar os pacotes necessários
15
- nltk.download('punkt')
16
- nltk.download('stopwords')
17
-
18
-
19
- # Carregar o modelo spaCy para reconhecimento de entidades nomeadas
20
- nlp = spacy.load("en_core_web_sm")
21
 
22
  app = FastAPI()
23
 
24
- class PostText(BaseModel):
25
- post: str # O post (texto) que será enviado para a API
26
 
27
- def clean_text(text):
28
- """Remove caracteres especiais e faz a limpeza do texto."""
29
- text = re.sub(r'[^\w\s]', '', text) # Remove pontuação
30
- text = text.lower() # Converte para minúsculas
31
- return text
32
-
33
- def extract_keywords(text):
34
- """Extrai palavras-chave usando spaCy e nltk."""
35
-
36
- # Limpeza inicial do texto
37
- cleaned_text = clean_text(text)
38
 
39
- # Tokenização do texto
40
- words = word_tokenize(cleaned_text)
 
41
 
42
- # Remover stopwords
43
- stop_words = set(stopwords.words("english"))
44
- filtered_words = [word for word in words if word not in stop_words]
45
-
46
- # Contar a frequência das palavras filtradas
47
- word_counts = Counter(filtered_words)
48
-
49
- # Processar entidades nomeadas com spaCy (ex.: pessoas, locais, eventos)
50
- doc = nlp(text)
51
- entities = [ent.text for ent in doc.ents]
52
-
53
- # Juntar as palavras mais frequentes e as entidades encontradas
54
- keywords = set(filtered_words + entities)
55
-
56
- # Ordenar e retornar as palavras-chave mais relevantes (top 10)
57
- return [keyword for keyword, _ in word_counts.most_common(10)] + entities[:10]
58
-
59
- @app.get("/generate-keywords")
60
- async def generate_keywords(post_text: PostText):
61
  try:
62
- # Gerar as palavras-chave a partir do texto do post
63
- keywords = extract_keywords(post_text.post)
 
 
 
 
 
 
 
 
64
 
65
- return {"keywords": keywords}
66
 
67
  except Exception as e:
68
- raise HTTPException(status_code=400, detail=str(e))
 
 
1
  from fastapi import FastAPI, HTTPException
2
  from pydantic import BaseModel
3
+ import yake
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  app = FastAPI()
6
 
7
+ # Inicializando o extrator de palavras-chave YAKE
8
+ kw_extractor = yake.KeywordExtractor()
9
 
10
+ @app.get("/extract-keywords")
11
+ async def extract_keywords(text: str, max_ngram_size: int = 3, num_of_keywords: int = 10):
12
+ """
13
+ Extrai palavras-chave de um texto enviado via GET.
 
 
 
 
 
 
 
14
 
15
+ :param text: Texto do post a ser analisado.
16
+ :param max_ngram_size: O tamanho máximo dos n-grams (default é 3).
17
+ :param num_of_keywords: Número máximo de palavras-chave a serem retornadas.
18
 
19
+ :return: Lista de palavras-chave extraídas.
20
+ """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  try:
22
+ # Configuração do extrator de palavras-chave
23
+ custom_kw_extractor = yake.KeywordExtractor(
24
+ lan="en", n=max_ngram_size, top=num_of_keywords
25
+ )
26
+
27
+ # Extraindo as palavras-chave
28
+ keywords = custom_kw_extractor.extract_keywords(text)
29
+
30
+ # Retornando as palavras-chave (ignora os scores)
31
+ keyword_list = [kw[1] for kw in keywords]
32
 
33
+ return {"keywords": keyword_list}
34
 
35
  except Exception as e:
36
+ raise HTTPException(status_code=400, detail=str(e))