joseluis12 commited on
Commit
f23fa4c
verified
1 Parent(s): bea614d

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -0
app.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ from transformers import pipeline
4
+
5
+ # Inicializa la aplicaci贸n FastAPI
6
+ app = FastAPI()
7
+
8
+ # Modelo Hugging Face para NER
9
+ MODEL_NAME = "Davlan/bert-base-multilingual-cased-ner-hrl" # Modelo para NER multiling眉e
10
+ ner_pipeline = pipeline("ner", model=MODEL_NAME)
11
+
12
+ # Define el esquema de entrada
13
+ class JobOffer(BaseModel):
14
+ texto: str
15
+
16
+ @app.post("/procesar_oferta/")
17
+ async def procesar_oferta(oferta: JobOffer):
18
+ """
19
+ Procesa el texto de una oferta laboral y genera un JSON estructurado.
20
+ """
21
+ # Aplica el modelo para extraer entidades
22
+ entities = ner_pipeline(oferta.texto)
23
+
24
+ # Inicializa el resultado en formato JSON
25
+ resultado = {
26
+ "titulo": None,
27
+ "empresa": None,
28
+ "ubicacion": None,
29
+ "salario": None,
30
+ "expe_min": None,
31
+ "tipo_contrato": None,
32
+ "estudios_min": None,
33
+ "skills": [],
34
+ "descripcion": None,
35
+ }
36
+
37
+ # Procesa las entidades para rellenar las claves del JSON
38
+ for entity in entities:
39
+ palabra = entity['word']
40
+ etiqueta = entity['entity']
41
+
42
+ if etiqueta == "B-TITLE":
43
+ resultado["titulo"] = palabra if not resultado["titulo"] else f"{resultado['titulo']} {palabra}"
44
+ elif etiqueta == "B-ORG":
45
+ resultado["empresa"] = palabra if not resultado["empresa"] else f"{resultado['empresa']} {palabra}"
46
+ elif etiqueta == "B-LOC":
47
+ resultado["ubicaci贸n"] = palabra if not resultado["ubicaci贸n"] else f"{resultado['ubicaci贸n']} {palabra}"
48
+ elif etiqueta == "B-SALARY":
49
+ resultado["salario"] = palabra if not resultado["salario"] else f"{resultado['salario']} {palabra}"
50
+ elif etiqueta == "B-EXP":
51
+ resultado["expe_min"] = palabra if not resultado["expe_min"] else f"{resultado['expe_min']} {palabra}"
52
+ elif etiqueta == "B-CONTRACT":
53
+ resultado["tipo_contrato"] = palabra if not resultado["tipo_contrato"] else f"{resultado['tipo_contrato']} {palabra}"
54
+ elif etiqueta == "B-STUDIES":
55
+ resultado["estudios_min"] = palabra if not resultado["estudios_min"] else f"{resultado['estudios_min']} {palabra}"
56
+ elif etiqueta == "B-SKILL":
57
+ resultado["skills"].append(palabra)
58
+ elif etiqueta == "B-DESCRIPTION":
59
+ resultado["descripcion"] = palabra if not resultado["descripcion"] else f"{resultado['descripcion']} {palabra}"
60
+
61
+ return resultado