| 167 | } |
| 168 | |
| 169 | function isUsefulWord(word: string): boolean { |
| 170 | if (!word) return false; |
| 171 | const normalized = word.toLowerCase(); |
| 172 | if (STOP_WORDS.has(normalized)) return false; |
| 173 | if (/^\d+$/.test(normalized)) return false; |
| 174 | if (/^[a-z]{1,2}$/i.test(normalized)) return false; |
| 175 | if (/^[o0]+$/i.test(normalized)) return false; |
| 176 | if (/^[._+\-]+$/.test(normalized)) return false; |
| 177 | return true; |
| 178 | } |
| 179 | |
| 180 | function addWord(counts: Map<string, number>, word: string, weight = 1): void { |
| 181 | const normalized = word.trim().toLowerCase(); |