2011-09-29 5 views
1

J'ai lu une documentation sur le module re qui est livré avec python intégré, mais je n'arrive pas à comprendre. En fait, je ne suis pas vraiment sûr que ce soit ce que je cherche, alors laissez-moi vous expliquer:Regex? Moteur de recherche?

J'ai un énorme dictionnaire. Ce que je veux, c'est pouvoir taper un critère de recherche, disons par exemple hello, puis faire une recherche dans le dictionnaire et donnez-moi une liste comme ceci:

hello, hell, hello world, hello123. Fondamentalement, tout ce qui ressemble aux critères de recherche. Est-ce que j'utiliserais regex pour ceci ou quelque chose d'autre?

+9

Définir "ressemblant". –

+4

Définir "énorme". –

+1

Tout sauf 'hell' est simplement' str.startswith', mais vous devriez en dire plus sur la chose 'hell', c'est-à-dire quels sont les critères pour ce genre de correspondance. – dmedvinsky

Répondre

2

Depuis que vous utilisez Python, vous devriez regarder Xapian, il a eu de grandes liaisons Python.

Ce que vous demandez est bien plus sophistiqué que pour les expressions régulières.

Vous avez besoin d'une recherche plein texte, avec des astuces et d'autres astuces pour faire la correspondance floue.

1

Il y a a new regexp module dans le dépôt PyPI (qui remplacera éventuellement le module actuel Python re).

Permet une correspondance floue.

2

Vous pourriez vouloir regarder quelque chose qui peut calculer une distance Levenshtein (éditer). Il y a un excellent article here sur la façon de construire quelque chose comme vous parlez de rien (dans Python!) Et il a été porté vers de nombreuses autres langues).

Vous ne voudrez peut-être pas suivre la route «à partir de zéro», mais l'article vous donnera beaucoup de contexte intéressant qui devrait vous aider à décider quel outil a le bon niveau de sophistication pour vous. Xapian, comme suggéré ci-dessus, Lucene, et d'autres moteurs de recherche en texte intégral fourniront ce genre de capacité, et il peut être très sophistiqué, mais là encore vous n'aurez peut-être pas besoin de tout cela.