habulaj commited on
Commit
bd02e25
·
verified ·
1 Parent(s): 729199d

Update routers/textclas.py

Browse files
Files changed (1) hide show
  1. routers/textclas.py +16 -21
routers/textclas.py CHANGED
@@ -1,9 +1,8 @@
1
  from fastapi import APIRouter, Query, HTTPException
2
- from sklearn.feature_extraction.text import TfidfVectorizer
3
- import numpy as np
4
 
5
- # Inicializa o vetor de TF-IDF
6
- vectorizer = TfidfVectorizer(stop_words='english')
7
 
8
  router = APIRouter()
9
 
@@ -13,30 +12,26 @@ def extract_keywords(
13
  num_keywords: int = Query(5, description="Número de palavras-chave a serem retornadas", ge=1, le=20)
14
  ):
15
  """
16
- Extrai palavras-chave relevantes de um texto usando o método TF-IDF (rápido e eficiente).
17
  """
18
  try:
19
- # Cria o vetor TF-IDF para o texto fornecido
20
- tfidf_matrix = vectorizer.fit_transform([text])
21
-
22
- # Ordena as palavras-chave com base no valor TF-IDF
23
- scores = np.array(tfidf_matrix.sum(axis=0)).flatten()
24
-
25
- # Recupera as palavras e seus scores
26
- feature_names = np.array(vectorizer.get_feature_names_out())
27
-
28
- # Ordena as palavras-chave por relevância
29
- ranked_keywords = sorted(zip(feature_names, scores), key=lambda x: x[1], reverse=True)
30
-
31
- # Seleciona as palavras-chave de acordo com o número solicitado
32
- keywords = [keyword for keyword, score in ranked_keywords[:num_keywords]]
33
 
 
34
  return {
35
  "text": text,
36
  "num_keywords": num_keywords,
37
- "keywords": keywords
38
  }
39
-
40
  except ValueError as ve:
41
  raise HTTPException(
42
  status_code=400,
 
1
  from fastapi import APIRouter, Query, HTTPException
2
+ import spacy
 
3
 
4
+ # Carrega o modelo em inglês do spaCy
5
+ nlp = spacy.load("en_core_web_sm")
6
 
7
  router = APIRouter()
8
 
 
12
  num_keywords: int = Query(5, description="Número de palavras-chave a serem retornadas", ge=1, le=20)
13
  ):
14
  """
15
+ Extrai palavras-chave relevantes de um texto com base no reconhecimento de entidades nomeadas.
16
  """
17
  try:
18
+ # Processa o texto com spaCy
19
+ doc = nlp(text)
20
+
21
+ # Extrai as entidades nomeadas do texto (pessoas, organizações, locais, etc)
22
+ entities = [ent.text for ent in doc.ents]
23
+
24
+ # Se o número de entidades for menor que o número solicitado, retorne todas
25
+ if len(entities) < num_keywords:
26
+ num_keywords = len(entities)
 
 
 
 
 
27
 
28
+ # Retorna o número solicitado de palavras-chave, ou todas as palavras-chave extraídas
29
  return {
30
  "text": text,
31
  "num_keywords": num_keywords,
32
+ "keywords": entities[:num_keywords]
33
  }
34
+
35
  except ValueError as ve:
36
  raise HTTPException(
37
  status_code=400,