2010-07-03 29 views
1

J'écris un morceau de code qui va extraire des mots du texte courant. Ce texte peut contenir des délimiteurs comme \ r, \ n etc. qui pourraient être présents dans le texte.Séparer les mots dans le texte courant en utilisant Python?

Je souhaite supprimer tous ces délimiteurs et extraire uniquement les mots entiers. Comment puis-je faire cela avec Python? toute bibliothèque disponible pour le crunching du texte en python?

Répondre

5

En supposant que votre définition de "mot" est d'accord avec celle du module d'expression régulière (re), qui est, des lettres, des chiffres et underscores, il est facile:

import re 
fullwords = re.findall(r'\w+', thetext) 

thetext est la chaîne en question (par exemple, venant d'un f.read() d'un objet fichier f ouvert pour la lecture, si c'est là que vous obtenez votre texte).

Si vous définissez des mots différemment (par exemple vous voulez inclure des apostrophes, par exemple "c'est" sera considéré comme "un mot"), ce n'est pas beaucoup plus difficile - utilisez simplement le premier argument de findall , par exemple r"[\w']+" pour l'affaire apostrophe.

Si vous avez besoin d'être très, très sophistiqué (par exemple, traiter les langues qui utilisent pas de pauses entre les mots), le problème devient soudainement beaucoup plus difficile et vous aurez besoin d'un paquet tiers comme nltk.

+0

Merci! Cela m'a vraiment aidé à résoudre le problème. J'ai regardé nltk mais malheureusement, en raison de la dépendance de l'installation de la bibliothèque C, je ne peux pas l'utiliser avec Google App Engine. – demos

1

En supposant que vos délimiteurs sont des caractères blancs (comme l'espace, \r et \n), puis str.split() de base fait ce que vous voulez:

>>> "asdf\nfoo\r\nbar too\tbaz".split() 
['asdf', 'foo', 'bar', 'too', 'baz'] 
+0

S'il est correct de considérer que chaque caractère de ponctuation fait partie du "mot" qu'il touche, oui, mais ce n'est pas un cas d'utilisation très fréquent dans une application réelle (par exemple, analyser ce commentaire que vous ne voudriez pas voir " touche, "' complète avec une virgule flottante comme "un mot" ;-). –

+0

@Alex Martelli: Oui, un bon point sur la ponctuation, mais à partir de la question, il n'était pas clair si cela était nécessaire - les exemples de délimiteurs étaient tous des espaces. OTOH, il peut être important de garder une certaine ponctuation avec le mot (par exemple '$', '-', '%' ...). Je ne suis pas d'accord avec le fait que ce n'est pas un cas d'utilisation commun, cela dépend vraiment de ce que vous construisez - la séparation des résultats tabulaires est une chose, l'analyse du langage naturel en est une autre :) – Stephen

Questions connexes