11
votes

Méthode efficace pour remplacer plusieurs mots dans le texte

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?

une expression régulière massive est pratique? Ou devrais-je simplement parcourir les caractères de document à la recherche de mots-clés (ennuyeux)?

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.


3 commentaires

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?


3 Réponses :


6
votes

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  '


2 commentaires

Vous voudrez peut-être ajouter des contrôles de bordure Word '\\ b (' + mots.join ('|') + ') \\ b'


Le REGEXP pourrait utiliser un peu d'amour, je suis d'accord, mais il illustre le point.



0
votes

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.


0 commentaires

0
votes

Une machine d'état semble être souvent utilisée pour des tâches similaires, par ex. http://www.codeproject.com/kb/string/civstringset.aspx


0 commentaires