-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.js
155 lines (130 loc) · 5.53 KB
/
main.js
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// Cargar datos desde el archivo JSON
async function loadData() {
try {
const response = await fetch('data.json');
if (!response.ok) throw new Error('No se pudo cargar data.json');
const data = await response.json();
console.log("Datos cargados:", data); // Verificar que los datos se cargaron
return data;
} catch (error) {
console.error("Error al cargar datos:", error);
document.getElementById('output').innerText = "Error al cargar data.json";
return null;
}
}
// Función para separar nombres simples y compuestos
const separarNombres = (lista) => {
return {
simples: lista.filter(nombre => !nombre.includes(" ")),
compuestos: lista.filter(nombre => nombre.includes(" "))
};
};
// Configurar el plugin y analizar el texto
async function setupPluginAndAnalyze() {
const data = await loadData();
if (!data) return;
// Separar productos en nombres simples y compuestos
const productos = separarNombres(data.Productos);
const comunidades = separarNombres(data.Comunidades);
const provincias = separarNombres(data.Provincias);
console.log("Productos.compuestos", productos.compuestos);
console.log("Comunidades.compuestas", comunidades.compuestos);
const myPlugin = {
tags: {
Producto: { isA: 'Noun' },
ProductoCompuesto: { isA: 'multi-word' },
Comunidad: { isA: 'Noun' },
ComunidadCompuesto: { isA: 'multi-word' },
Provincia: { isA: 'Noun' },
ProvinciaCompuesto: { isA: 'multi-word' },
Provincia: { isA: 'Noun' },
Anyo: { isA: 'Value' }
},
words: {
...Object.fromEntries(productos.simples.map(prod => [prod.toLowerCase(), 'Producto'])),
...Object.fromEntries(productos.compuestos.map(prod => [prod.toLowerCase(), 'ProductoCompuesto'])),
...Object.fromEntries(comunidades.simples.map(com => [com.toLowerCase(), 'Comunidad'])),
...Object.fromEntries(comunidades.compuestos.map(com => [com.toLowerCase(), 'ComunidadCompuesto'])),
...Object.fromEntries(provincias.simples.map(prov => [prov.toLowerCase(), 'Provincia'])),
...Object.fromEntries(provincias.compuestos.map(prov => [prov.toLowerCase(), 'ProvinciaCompuesto'])),
...Object.fromEntries(data.Anyos.map(ay => [ay.toString(), 'Anyo']))
}
};
try {
nlp.plugin(myPlugin);
const input = document.getElementById('input-text').value;
const doc = nlp(input.toLowerCase());
console.log(doc.debug());
console.log(doc.match('#Producto').out('array'));
// Obtener coincidencias
const resultado = {
Producto: doc.match('#Producto').out('array'),
ProductosCompuestos: doc.match('#ProductoCompuesto').out('array'),
Comunidad: doc.match('#Comunidad').out('array'),
ComunidadesCompuestas: doc.match('#ComunidadCompuesto').out('array'),
Provincia: doc.match('#Provincia').out('array'),
ProvinciasCompuestas: doc.match('#ProvinciaCompuesto').out('array'),
Anyo: doc.match('#Anyo').out('array')
};
console.log("Resultado:", resultado);
document.getElementById('output').innerText = JSON.stringify(resultado, null, 2);
} catch (error) {
console.error("Error al analizar texto:", error);
document.getElementById('output').innerText = "Error al analizar el texto.";
}
}
// Elementos del DOM
const inputText = document.getElementById("input-text");
const suggestionsContainer = document.getElementById("suggestions");
let loadedData = null;
// Cargar los datos y almacenarlos en una variable global
loadData().then(data => loadedData = data);
// Función para mostrar sugerencias
function showSuggestions(word) {
if (!loadedData) return;
// Filtrar las sugerencias a partir de los datos cargados
const suggestions = [
...loadedData.Productos,
...loadedData.Comunidades,
...loadedData.Provincias,
...loadedData.Anyos
].filter(suggestion => suggestion.toLowerCase().startsWith(word.toLowerCase()));
// Limpiar sugerencias anteriores
suggestionsContainer.innerHTML = "";
// Mostrar nuevas sugerencias
suggestions.forEach(suggestion => {
const suggestionElement = document.createElement("div");
suggestionElement.classList.add("suggestion");
suggestionElement.textContent = suggestion;
suggestionElement.addEventListener("click", () => {
addSuggestionToInput(suggestion);
});
suggestionsContainer.appendChild(suggestionElement);
});
// Mostrar el contenedor si hay sugerencias
suggestionsContainer.style.display = suggestions.length > 0 ? "block" : "none";
}
// Función para agregar la sugerencia al campo de texto
function addSuggestionToInput(suggestion) {
const currentText = inputText.value;
const words = currentText.split(" ");
words.pop(); // Elimina la última palabra que está siendo escrita
words.push(suggestion); // Agrega la sugerencia
inputText.value = words.join(" ") + " "; // Añade un espacio al final
// Oculta las sugerencias
suggestionsContainer.style.display = "none";
}
// Evento al escribir en el campo de texto
inputText.addEventListener("input", () => {
const currentText = inputText.value;
const words = currentText.split(" ");
const currentWord = words[words.length - 1];
// Mostrar sugerencias solo si hay una palabra en curso
if (currentWord) {
showSuggestions(currentWord);
} else {
suggestionsContainer.style.display = "none";
}
});
// Agregar el evento al botón
document.getElementById("analyze-button").addEventListener("click", setupPluginAndAnalyze);