whatsapp-docs-mcp 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +54 -2
- package/dist/index.js.map +1 -1
- package/dist/tools.d.ts +10 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +59 -0
- package/dist/tools.js.map +1 -1
- package/dist/tools.test.js +103 -1
- package/dist/tools.test.js.map +1 -1
- package/dist/utils/search.d.ts +18 -1
- package/dist/utils/search.d.ts.map +1 -1
- package/dist/utils/search.js +363 -26
- package/dist/utils/search.js.map +1 -1
- package/dist/utils/search.test.js +198 -0
- package/dist/utils/search.test.js.map +1 -1
- package/package.json +1 -1
- package/docs/index.md +0 -318
package/dist/utils/search.js
CHANGED
|
@@ -1,39 +1,325 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SYNONYMS = void 0;
|
|
3
4
|
exports.normalizeText = normalizeText;
|
|
5
|
+
exports.stemWord = stemWord;
|
|
6
|
+
exports.expandQueryTerms = expandQueryTerms;
|
|
4
7
|
exports.searchInContent = searchInContent;
|
|
5
8
|
exports.extractTitle = extractTitle;
|
|
6
9
|
exports.extractDescription = extractDescription;
|
|
7
10
|
exports.extractExcerpt = extractExcerpt;
|
|
8
11
|
exports.calculateRelevance = calculateRelevance;
|
|
12
|
+
/**
|
|
13
|
+
* Dicionário de sinônimos bilíngues (português/inglês) para termos da WhatsApp API
|
|
14
|
+
* Todos os termos devem estar normalizados (sem acentos, minúsculas)
|
|
15
|
+
*/
|
|
16
|
+
exports.SYNONYMS = {
|
|
17
|
+
// Typing/Digitação
|
|
18
|
+
'typing': ['digitacao', 'digitando', 'digitar', 'escrevendo', 'type'],
|
|
19
|
+
'digitacao': ['typing', 'digitando', 'digitar', 'type'],
|
|
20
|
+
'digitando': ['typing', 'digitacao', 'digitar', 'type'],
|
|
21
|
+
'type': ['typing', 'digitacao', 'tipo'],
|
|
22
|
+
// Indicator/Indicador
|
|
23
|
+
'indicator': ['indicador', 'indicadores', 'indicators'],
|
|
24
|
+
'indicators': ['indicador', 'indicadores', 'indicator'],
|
|
25
|
+
'indicador': ['indicator', 'indicators', 'indicadores'],
|
|
26
|
+
'indicadores': ['indicator', 'indicators', 'indicador'],
|
|
27
|
+
// Message/Mensagem
|
|
28
|
+
'message': ['mensagem', 'mensagens', 'msg', 'messages'],
|
|
29
|
+
'messages': ['mensagem', 'mensagens', 'msg', 'message'],
|
|
30
|
+
'mensagem': ['message', 'messages', 'msg', 'mensagens'],
|
|
31
|
+
'mensagens': ['message', 'messages', 'msg', 'mensagem'],
|
|
32
|
+
'msg': ['message', 'mensagem', 'messages', 'mensagens'],
|
|
33
|
+
// Audio/Áudio
|
|
34
|
+
'audio': ['som', 'voz', 'voice', 'sound'],
|
|
35
|
+
'voz': ['audio', 'voice', 'som'],
|
|
36
|
+
'voice': ['audio', 'voz', 'som'],
|
|
37
|
+
'som': ['audio', 'voz', 'voice', 'sound'],
|
|
38
|
+
// Webhook/Callback
|
|
39
|
+
'webhook': ['callback', 'notificacao', 'notification', 'webhooks'],
|
|
40
|
+
'webhooks': ['webhook', 'callback', 'notificacao'],
|
|
41
|
+
'callback': ['webhook', 'notificacao', 'notification'],
|
|
42
|
+
'notificacao': ['webhook', 'callback', 'notification', 'notificacoes'],
|
|
43
|
+
// Template/Modelo
|
|
44
|
+
'template': ['modelo', 'templates', 'modelos'],
|
|
45
|
+
'templates': ['modelo', 'template', 'modelos'],
|
|
46
|
+
'modelo': ['template', 'templates', 'modelos'],
|
|
47
|
+
'modelos': ['template', 'templates', 'modelo'],
|
|
48
|
+
// Send/Enviar
|
|
49
|
+
'send': ['enviar', 'envio', 'sending'],
|
|
50
|
+
'enviar': ['send', 'envio', 'sending'],
|
|
51
|
+
'envio': ['send', 'enviar', 'sending'],
|
|
52
|
+
// Receive/Receber
|
|
53
|
+
'receive': ['receber', 'recebimento', 'receiving'],
|
|
54
|
+
'receber': ['receive', 'recebimento', 'receiving'],
|
|
55
|
+
// Error/Erro
|
|
56
|
+
'error': ['erro', 'errors', 'erros'],
|
|
57
|
+
'errors': ['erro', 'erros', 'error'],
|
|
58
|
+
'erro': ['error', 'errors', 'erros'],
|
|
59
|
+
'erros': ['error', 'errors', 'erro'],
|
|
60
|
+
// Media/Mídia
|
|
61
|
+
'media': ['midia', 'midias'],
|
|
62
|
+
'midia': ['media', 'midias'],
|
|
63
|
+
// Image/Imagem
|
|
64
|
+
'image': ['imagem', 'images', 'imagens', 'foto', 'picture'],
|
|
65
|
+
'images': ['imagem', 'imagens', 'image', 'fotos'],
|
|
66
|
+
'imagem': ['image', 'images', 'imagens', 'foto'],
|
|
67
|
+
'imagens': ['image', 'images', 'imagem', 'fotos'],
|
|
68
|
+
// Video/Vídeo
|
|
69
|
+
'video': ['videos'],
|
|
70
|
+
'videos': ['video'],
|
|
71
|
+
// Document/Documento
|
|
72
|
+
'document': ['documento', 'documents', 'documentos', 'doc'],
|
|
73
|
+
'documents': ['documento', 'documentos', 'document'],
|
|
74
|
+
'documento': ['document', 'documents', 'documentos'],
|
|
75
|
+
'documentos': ['document', 'documents', 'documento'],
|
|
76
|
+
// Phone/Telefone
|
|
77
|
+
'phone': ['telefone', 'phones', 'telefones', 'numero'],
|
|
78
|
+
'telefone': ['phone', 'phones', 'telefones', 'numero'],
|
|
79
|
+
'numero': ['phone', 'telefone', 'number'],
|
|
80
|
+
'number': ['numero', 'phone', 'telefone'],
|
|
81
|
+
// Business/Negócio
|
|
82
|
+
'business': ['negocio', 'comercial', 'empresa'],
|
|
83
|
+
'negocio': ['business', 'comercial', 'empresa'],
|
|
84
|
+
// Account/Conta
|
|
85
|
+
'account': ['conta', 'accounts', 'contas'],
|
|
86
|
+
'conta': ['account', 'accounts', 'contas'],
|
|
87
|
+
// Status
|
|
88
|
+
'status': ['estado', 'situacao'],
|
|
89
|
+
'estado': ['status', 'situacao'],
|
|
90
|
+
// Read/Lido
|
|
91
|
+
'read': ['lido', 'leitura', 'ler'],
|
|
92
|
+
'lido': ['read', 'leitura'],
|
|
93
|
+
'leitura': ['read', 'lido'],
|
|
94
|
+
// Recording/Gravação
|
|
95
|
+
'recording': ['gravacao', 'gravando', 'gravar'],
|
|
96
|
+
'gravacao': ['recording', 'gravando', 'gravar'],
|
|
97
|
+
'gravando': ['recording', 'gravacao', 'gravar'],
|
|
98
|
+
'gravar': ['recording', 'gravacao', 'gravando'],
|
|
99
|
+
};
|
|
9
100
|
/**
|
|
10
101
|
* Normaliza texto removendo acentos e convertendo para minúsculas
|
|
11
102
|
*/
|
|
12
103
|
function normalizeText(text) {
|
|
13
104
|
return text.normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase();
|
|
14
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Aplica stemming básico para português e inglês
|
|
108
|
+
* Retorna array com a palavra original e possíveis stems
|
|
109
|
+
*/
|
|
110
|
+
function stemWord(word) {
|
|
111
|
+
const stems = [word];
|
|
112
|
+
if (word.length < 4)
|
|
113
|
+
return stems;
|
|
114
|
+
// Português - verbos no gerúndio (-ando, -endo, -indo)
|
|
115
|
+
if (word.endsWith('ando') && word.length > 5) {
|
|
116
|
+
stems.push(word.slice(0, -4)); // raiz
|
|
117
|
+
stems.push(word.slice(0, -4) + 'ar'); // infinitivo
|
|
118
|
+
stems.push(word.slice(0, -4) + 'a'); // presente
|
|
119
|
+
}
|
|
120
|
+
if (word.endsWith('endo') && word.length > 5) {
|
|
121
|
+
stems.push(word.slice(0, -4));
|
|
122
|
+
stems.push(word.slice(0, -4) + 'er');
|
|
123
|
+
stems.push(word.slice(0, -4) + 'e');
|
|
124
|
+
}
|
|
125
|
+
if (word.endsWith('indo') && word.length > 5) {
|
|
126
|
+
stems.push(word.slice(0, -4));
|
|
127
|
+
stems.push(word.slice(0, -4) + 'ir');
|
|
128
|
+
stems.push(word.slice(0, -4) + 'e');
|
|
129
|
+
}
|
|
130
|
+
// Português - substantivos terminados em -ção/-cao (normalizado)
|
|
131
|
+
if ((word.endsWith('cao') || word.endsWith('coes')) && word.length > 4) {
|
|
132
|
+
const root = word.endsWith('coes') ? word.slice(0, -4) : word.slice(0, -3);
|
|
133
|
+
stems.push(root);
|
|
134
|
+
stems.push(root + 'c');
|
|
135
|
+
stems.push(root + 'cao');
|
|
136
|
+
stems.push(root + 'coes');
|
|
137
|
+
}
|
|
138
|
+
// Inglês - verbos no gerúndio (-ing)
|
|
139
|
+
if (word.endsWith('ing') && word.length > 5) {
|
|
140
|
+
stems.push(word.slice(0, -3)); // type
|
|
141
|
+
stems.push(word.slice(0, -3) + 'e'); // type (para typing -> type)
|
|
142
|
+
// Dobrar consoante: running -> run
|
|
143
|
+
if (word.length > 6 && word[word.length - 4] === word[word.length - 5]) {
|
|
144
|
+
stems.push(word.slice(0, -4));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Inglês - passado (-ed)
|
|
148
|
+
if (word.endsWith('ed') && word.length > 4) {
|
|
149
|
+
stems.push(word.slice(0, -2));
|
|
150
|
+
stems.push(word.slice(0, -2) + 'e'); // created -> create
|
|
151
|
+
// Dobrar consoante
|
|
152
|
+
if (word.length > 5 && word[word.length - 3] === word[word.length - 4]) {
|
|
153
|
+
stems.push(word.slice(0, -3));
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Plural inglês (-s, -es, -ies)
|
|
157
|
+
if (word.endsWith('ies') && word.length > 4) {
|
|
158
|
+
stems.push(word.slice(0, -3) + 'y');
|
|
159
|
+
}
|
|
160
|
+
else if (word.endsWith('es') && word.length > 3) {
|
|
161
|
+
stems.push(word.slice(0, -2));
|
|
162
|
+
stems.push(word.slice(0, -1));
|
|
163
|
+
}
|
|
164
|
+
else if (word.endsWith('s') && !word.endsWith('ss') && word.length > 3) {
|
|
165
|
+
stems.push(word.slice(0, -1));
|
|
166
|
+
}
|
|
167
|
+
// Plural português (-ões -> -ão)
|
|
168
|
+
if (word.endsWith('oes') && word.length > 4) {
|
|
169
|
+
stems.push(word.slice(0, -3) + 'ao');
|
|
170
|
+
}
|
|
171
|
+
// Remove duplicatas e retorna
|
|
172
|
+
return [...new Set(stems)];
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Expande termos da query usando stemming e sinônimos
|
|
176
|
+
* Retorna um Set com todos os termos expandidos
|
|
177
|
+
*/
|
|
178
|
+
function expandQueryTerms(words) {
|
|
179
|
+
const expanded = new Set();
|
|
180
|
+
for (const word of words) {
|
|
181
|
+
// Adiciona palavra original
|
|
182
|
+
expanded.add(word);
|
|
183
|
+
// Adiciona stems
|
|
184
|
+
const stems = stemWord(word);
|
|
185
|
+
stems.forEach(s => expanded.add(s));
|
|
186
|
+
// Adiciona sinônimos (para palavra original e stems)
|
|
187
|
+
const allForms = [word, ...stems];
|
|
188
|
+
for (const form of allForms) {
|
|
189
|
+
const synonyms = exports.SYNONYMS[form];
|
|
190
|
+
if (synonyms) {
|
|
191
|
+
synonyms.forEach(s => expanded.add(s));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return expanded;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Divide texto em palavras, considerando underscores, hífens e espaços como separadores
|
|
199
|
+
*/
|
|
200
|
+
function splitIntoWords(text) {
|
|
201
|
+
return text
|
|
202
|
+
.replace(/[_\-\s]+/g, ' ') // Substitui underscores, hífens e múltiplos espaços por espaço
|
|
203
|
+
.split(/\s+/)
|
|
204
|
+
.filter(w => w.length > 0);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Remove sufixos comuns para melhor matching (plural, etc)
|
|
208
|
+
*/
|
|
209
|
+
function normalizeWord(word) {
|
|
210
|
+
// Remove sufixos comuns de plural em inglês
|
|
211
|
+
if (word.length > 3) {
|
|
212
|
+
if (word.endsWith('s') && !word.endsWith('ss')) {
|
|
213
|
+
return word.slice(0, -1);
|
|
214
|
+
}
|
|
215
|
+
if (word.endsWith('es')) {
|
|
216
|
+
return word.slice(0, -2);
|
|
217
|
+
}
|
|
218
|
+
if (word.endsWith('ies')) {
|
|
219
|
+
return word.slice(0, -3) + 'y';
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return word;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Verifica se algum termo expandido está presente no texto
|
|
226
|
+
*/
|
|
227
|
+
function hasExpandedTermMatch(text, expandedTerms) {
|
|
228
|
+
for (const term of expandedTerms) {
|
|
229
|
+
if (text.includes(term)) {
|
|
230
|
+
return true;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Conta quantos termos expandidos estão presentes no texto
|
|
237
|
+
*/
|
|
238
|
+
function countExpandedTermMatches(text, expandedTerms) {
|
|
239
|
+
let count = 0;
|
|
240
|
+
for (const term of expandedTerms) {
|
|
241
|
+
if (text.includes(term)) {
|
|
242
|
+
count++;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
return count;
|
|
246
|
+
}
|
|
15
247
|
/**
|
|
16
248
|
* Busca textual melhorada em conteúdo markdown
|
|
17
|
-
*
|
|
249
|
+
* Usa expansão de termos (stemming + sinônimos) para busca mais flexível
|
|
250
|
+
* Remove duplicatas e considera nome do arquivo
|
|
18
251
|
*/
|
|
19
252
|
function searchInContent(content, query, filePath) {
|
|
20
253
|
const normalizedQuery = normalizeText(query.trim());
|
|
21
254
|
const normalizedContent = normalizeText(content);
|
|
22
255
|
const normalizedFilePath = filePath ? normalizeText(filePath) : '';
|
|
23
|
-
// Busca no nome do arquivo primeiro (maior relevância)
|
|
256
|
+
// Busca no nome do arquivo primeiro (maior relevância) - busca exata
|
|
24
257
|
if (filePath && normalizedFilePath.includes(normalizedQuery)) {
|
|
25
258
|
return true;
|
|
26
259
|
}
|
|
27
|
-
// Divide query em palavras
|
|
28
|
-
const queryWords = normalizedQuery
|
|
29
|
-
// Se
|
|
260
|
+
// Divide query em palavras e REMOVE DUPLICATAS
|
|
261
|
+
const queryWords = [...new Set(splitIntoWords(normalizedQuery))].filter(w => w.length > 2);
|
|
262
|
+
// Se não tem palavras válidas, busca string completa
|
|
263
|
+
if (queryWords.length === 0) {
|
|
264
|
+
return normalizedContent.includes(normalizedQuery) ||
|
|
265
|
+
normalizedFilePath.includes(normalizedQuery);
|
|
266
|
+
}
|
|
267
|
+
// Expande termos usando stemming e sinônimos
|
|
268
|
+
const expandedTerms = expandQueryTerms(queryWords);
|
|
269
|
+
// Palavras do nome do arquivo
|
|
270
|
+
const fileWords = splitIntoWords(normalizedFilePath);
|
|
271
|
+
const expandedFileTerms = expandQueryTerms(fileWords);
|
|
272
|
+
// Verifica quantas palavras originais (ou seus equivalentes) foram encontradas
|
|
273
|
+
let matchedOriginalWords = 0;
|
|
274
|
+
let matchedInFileName = 0;
|
|
275
|
+
for (const qw of queryWords) {
|
|
276
|
+
const wordExpansions = expandQueryTerms([qw]);
|
|
277
|
+
// Verifica se alguma expansão está no conteúdo
|
|
278
|
+
const inContent = hasExpandedTermMatch(normalizedContent, wordExpansions);
|
|
279
|
+
// Verifica se alguma expansão está no nome do arquivo
|
|
280
|
+
// Também verifica se alguma expansão do arquivo corresponde às expansões da query
|
|
281
|
+
let inFile = hasExpandedTermMatch(normalizedFilePath, wordExpansions);
|
|
282
|
+
if (!inFile) {
|
|
283
|
+
// Verifica overlap entre expansões da query e do arquivo
|
|
284
|
+
for (const exp of wordExpansions) {
|
|
285
|
+
if (expandedFileTerms.has(exp)) {
|
|
286
|
+
inFile = true;
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
if (inContent || inFile) {
|
|
292
|
+
matchedOriginalWords++;
|
|
293
|
+
if (inFile) {
|
|
294
|
+
matchedInFileName++;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// LÓGICA DE MATCH FLEXÍVEL:
|
|
299
|
+
// 1. Se encontrou 2+ palavras no nome do arquivo → MATCH (alta confiança)
|
|
300
|
+
if (matchedInFileName >= 2) {
|
|
301
|
+
return true;
|
|
302
|
+
}
|
|
303
|
+
// 2. Se encontrou 1 palavra no nome do arquivo E 1+ no conteúdo → MATCH
|
|
304
|
+
if (matchedInFileName >= 1 && matchedOriginalWords >= 2) {
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
// 3. Para queries com múltiplas palavras: precisa encontrar pelo menos 50%
|
|
30
308
|
if (queryWords.length > 1) {
|
|
31
|
-
|
|
32
|
-
|
|
309
|
+
const requiredMatches = Math.max(2, Math.ceil(queryWords.length * 0.5));
|
|
310
|
+
if (matchedOriginalWords >= requiredMatches) {
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
313
|
+
// Fallback: se encontrou pelo menos 2 palavras, aceita
|
|
314
|
+
if (matchedOriginalWords >= 2) {
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
33
317
|
}
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
|
|
318
|
+
// 4. Para query de uma palavra: basta encontrar em algum lugar
|
|
319
|
+
if (queryWords.length === 1 && matchedOriginalWords >= 1) {
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
return false;
|
|
37
323
|
}
|
|
38
324
|
/**
|
|
39
325
|
* Extrai título do arquivo markdown (primeiro # ou nome do arquivo)
|
|
@@ -103,44 +389,95 @@ function extractExcerpt(content, query, contextLines = 3) {
|
|
|
103
389
|
}
|
|
104
390
|
/**
|
|
105
391
|
* Calcula relevância melhorada baseada em ocorrências, nome do arquivo e título
|
|
392
|
+
* Usa expansão de termos (stemming + sinônimos) para melhor scoring
|
|
106
393
|
*/
|
|
107
394
|
function calculateRelevance(content, query, filePath) {
|
|
108
395
|
const normalizedQuery = normalizeText(query);
|
|
109
396
|
const normalizedContent = normalizeText(content);
|
|
110
397
|
const normalizedFilePath = filePath ? normalizeText(filePath) : '';
|
|
111
|
-
|
|
398
|
+
// Remove duplicatas das palavras da query
|
|
399
|
+
const queryWords = [...new Set(splitIntoWords(normalizedQuery))].filter(w => w.length > 2);
|
|
112
400
|
let score = 0;
|
|
113
|
-
// Bônus alto se encontra no nome do arquivo
|
|
401
|
+
// Bônus alto se encontra no nome do arquivo (busca exata)
|
|
114
402
|
if (filePath && normalizedFilePath.includes(normalizedQuery)) {
|
|
115
403
|
score += 50;
|
|
116
404
|
}
|
|
405
|
+
// Expande termos do arquivo para comparação
|
|
406
|
+
const fileWords = splitIntoWords(normalizedFilePath);
|
|
407
|
+
const expandedFileTerms = expandQueryTerms(fileWords);
|
|
408
|
+
// Bônus se palavras da query (ou sinônimos/stems) correspondem ao nome do arquivo
|
|
409
|
+
if (filePath) {
|
|
410
|
+
for (const qw of queryWords) {
|
|
411
|
+
const wordExpansions = expandQueryTerms([qw]);
|
|
412
|
+
// Verifica match direto
|
|
413
|
+
for (const exp of wordExpansions) {
|
|
414
|
+
if (normalizedFilePath.includes(exp)) {
|
|
415
|
+
score += 20; // Bônus alto por match no nome do arquivo
|
|
416
|
+
break;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
// Verifica overlap com expansões do arquivo
|
|
420
|
+
for (const exp of wordExpansions) {
|
|
421
|
+
if (expandedFileTerms.has(exp)) {
|
|
422
|
+
score += 15; // Bônus por sinônimo/stem encontrado
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
117
428
|
// Bônus se encontra no título (primeiro H1)
|
|
118
429
|
const h1Match = content.match(/^#\s+(.+)$/m);
|
|
119
430
|
if (h1Match) {
|
|
120
431
|
const normalizedTitle = normalizeText(h1Match[1]);
|
|
432
|
+
const expandedTitleTerms = expandQueryTerms(splitIntoWords(normalizedTitle));
|
|
121
433
|
if (normalizedTitle.includes(normalizedQuery)) {
|
|
122
434
|
score += 30;
|
|
123
435
|
}
|
|
124
|
-
// Bônus adicional se cada palavra da query está no título
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
436
|
+
// Bônus adicional se cada palavra da query (ou sinônimo) está no título
|
|
437
|
+
for (const word of queryWords) {
|
|
438
|
+
const wordExpansions = expandQueryTerms([word]);
|
|
439
|
+
for (const exp of wordExpansions) {
|
|
440
|
+
if (normalizedTitle.includes(exp) || expandedTitleTerms.has(exp)) {
|
|
441
|
+
score += 8;
|
|
442
|
+
break;
|
|
443
|
+
}
|
|
128
444
|
}
|
|
129
|
-
}
|
|
445
|
+
}
|
|
130
446
|
}
|
|
131
|
-
// Conta ocorrências de cada palavra no conteúdo
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
|
|
447
|
+
// Conta ocorrências de cada palavra (e seus sinônimos/stems) no conteúdo
|
|
448
|
+
for (const word of queryWords) {
|
|
449
|
+
const wordExpansions = expandQueryTerms([word]);
|
|
450
|
+
let wordScore = 0;
|
|
451
|
+
for (const exp of wordExpansions) {
|
|
452
|
+
const escapedExp = exp.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
453
|
+
const matches = (normalizedContent.match(new RegExp(escapedExp, 'g')) || []).length;
|
|
454
|
+
if (matches > 0) {
|
|
455
|
+
// Palavra original vale mais, sinônimos valem um pouco menos
|
|
456
|
+
if (exp === word) {
|
|
457
|
+
wordScore += matches * 3;
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
wordScore += matches * 1.5;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
score += Math.min(wordScore, 20); // Cap por palavra para evitar spam
|
|
135
465
|
// Bônus adicional se palavra está no nome do arquivo
|
|
136
|
-
|
|
137
|
-
|
|
466
|
+
for (const exp of wordExpansions) {
|
|
467
|
+
if (normalizedFilePath.includes(exp)) {
|
|
468
|
+
score += 10;
|
|
469
|
+
break;
|
|
470
|
+
}
|
|
138
471
|
}
|
|
139
|
-
}
|
|
472
|
+
}
|
|
140
473
|
// Se query de uma palavra, também conta ocorrências da query completa
|
|
141
474
|
if (queryWords.length === 0 && normalizedQuery.length > 2) {
|
|
142
|
-
const
|
|
143
|
-
|
|
475
|
+
const queryExpansions = expandQueryTerms([normalizedQuery]);
|
|
476
|
+
for (const exp of queryExpansions) {
|
|
477
|
+
const escapedExp = exp.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
478
|
+
const matches = (normalizedContent.match(new RegExp(escapedExp, 'g')) || []).length;
|
|
479
|
+
score += matches * 2;
|
|
480
|
+
}
|
|
144
481
|
}
|
|
145
482
|
// Normaliza para 0-100
|
|
146
483
|
return Math.min(100, score);
|
package/dist/utils/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":"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"}
|