Spaces:
Sleeping
Sleeping
Update analyzers/ner_analyzer.py
Browse files- analyzers/ner_analyzer.py +11 -2
analyzers/ner_analyzer.py
CHANGED
|
@@ -24,8 +24,17 @@ class NERAnalyzer(BaseAnalyzer):
|
|
| 24 |
def extract_entities(self, text: str) -> List[Tuple[str, str]]:
|
| 25 |
logger.debug("Iniciando extração de entidades com NER")
|
| 26 |
|
| 27 |
-
#
|
| 28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
|
| 30 |
# Filtrar as entidades e retorná-las como uma lista de tuplas (entidade, tipo)
|
| 31 |
extracted_entities = [(entity['word'], entity['entity']) for entity in entities]
|
|
|
|
| 24 |
def extract_entities(self, text: str) -> List[Tuple[str, str]]:
|
| 25 |
logger.debug("Iniciando extração de entidades com NER")
|
| 26 |
|
| 27 |
+
# Dividir o texto em partes menores, cada uma com no máximo 512 tokens
|
| 28 |
+
inputs = self.tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=512)
|
| 29 |
+
input_ids = inputs['input_ids']
|
| 30 |
+
|
| 31 |
+
# Verificar se o tamanho dos tokens excede o limite e dividir se necessário
|
| 32 |
+
entities = []
|
| 33 |
+
for i in range(0, input_ids.size(1), 512):
|
| 34 |
+
chunk = input_ids[:, i:i+512] # Dividir em partes de 512 tokens
|
| 35 |
+
chunk_text = self.tokenizer.decode(chunk[0], skip_special_tokens=True)
|
| 36 |
+
chunk_entities = self.ner_pipeline(chunk_text)
|
| 37 |
+
entities.extend(chunk_entities)
|
| 38 |
|
| 39 |
# Filtrar as entidades e retorná-las como uma lista de tuplas (entidade, tipo)
|
| 40 |
extracted_entities = [(entity['word'], entity['entity']) for entity in entities]
|