/ / Ruby Expression régulière trop grande / Correspondance de plusieurs chaînes - ruby, regex

Ruby Expression régulière trop grande / Correspondance multiple - ruby, regex

J'ai 1 000 000 chaînes que je veuxclasser par catégories. La façon dont je le fais est de l’aplatir s’il contient un ensemble de mots ou de phrases. L'ensemble de mots est d'environ 10 000. Idéalement, je serais capable de prendre en charge les expressions régulières, mais je me concentre sur la rapidité d'exécution. Exemples de phrases:

ford, porsche, mazda ...

Je ne veux vraiment pas faire correspondre chaque mot avec les chaînes une par une, alors j'ai décidé d'utiliser des expressions régulières. Malheureusement, je rencontre un problème d'expression régulière:

Expression régulière.new ("(a)" * 253) => / (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) ) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) a) (a) (a) (a) (a) a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) ...

Expression régulière.new ("(a)" * 254) Expression rationnelle: expression régulière trop grande: / (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) ) (a) (a) (a) (a) (a) (a) (a) (a) (a) (a) ...

où a serait l'un de mes mots ou phrases. En ce moment, je prévois courir 10 000/253 matchs. J'ai lu que la longueur de l'expression rationnelle avait un impact important sur les performances, mais ma correspondance d'expression régulière est très simple et l'expression rationnelle est créée très rapidement. J'aimerais contourner la limitation ou utiliser une meilleure solution si quelqu'un a des idées. Merci.

Réponses:

1 pour la réponse № 1

Vous pourriez envisager d'autres mécanismes pour reconnaître des mots de 10 000 mots.

  • Trie: Parfois appelé arbre de préfixes, il est souvent utilisé par les vérificateurs orthographiques pour effectuer des recherches de mots. Voir Trie sur Wikipédia
  • DFA (automates finis déterministes): Un DFA est souvent créé par le lexer dans un compilateur pour reconnaître les jetons du langage. Un DFA fonctionne très vite. Les expressions rationnelles simples sont souvent compilées dans des DFA. Voir DFA sur Wikipédia