Utilisation de JavaScript, j'ai besoin de supprimer efficacement ~ 10000 mots-clés d'un document de 3 100 000 mots, dont ~ 1000 seront des mots-clés. Quelle approche suggéreriez-vous? p>
une expression régulière EDIT:
Bon point - seulement des mots entiers, pas des pièces. Et certains mots-clés contiennent des espaces.
J'essaie de faire tout le côté du client pour réduire la pression sur le backend. P>
3 Réponses :
L'utilisation d'une expression régulière peut être une bonne option:
var words = ['bon', 'mad'];
'joe bon joe mad'.replace(new RegExp('(' + words.join('|') + ')', 'g'), '');
// 'joe joe '
Vous voudrez peut-être ajouter des contrôles de bordure Word '\\ b (' + mots.join ('|') + ') \\ b' code>
Le REGEXP pourrait utiliser un peu d'amour, je suis d'accord, mais il illustre le point.
Mon instinct me dit que pour un grand nombre de mots-clés - trier les mots-clés et la création d'une machine d'état d'état de caractères serait beaucoup plus rapide qu'une expression régulière, car la machine d'état est triviale, elle peut être générée automatiquement. p>
Une machine d'état semble être souvent utilisée pour des tâches similaires, par ex. http://www.codeproject.com/kb/string/civstringset.aspx p>
Question interessante. D'une part, une machine à écrire manuscrite dans une langue compilée battrait l'enfer de l'enfer de regex, mais de l'autre, JavaScript est assez lent, vous auriez donc besoin d'essayer de comparaître si le moteur de regex est plus rapide en raison d'être compilé. .
Cela doit-il être JavaScript ou pouvez-vous le pousser au serveur pour la transformation? Il est difficile de dire qui sera plus efficace sans certaines données pour le tester. Si vous utilisez Python, par exemple, vous pouvez segmenter les données et enfiler le processus si vous avez vraiment besoin de.
Êtes-vous également tenu de remplacer que des mots entiers ou des parties de mot aussi - par exemple, mot, mot-clé, mot-tige, tous ont le mot «mot» en eux, comment doivent-ils être traités?