Suppression de mots vides avec NLTK
Je suis en train de traiter un utilisateur a entré du texte par la suppression de mots vides à l'aide de nltk toolkit, mais avec des mots vides-suppression des mots comme "et", "ou", "et non pas" est supprimé. Je veux que ces mots pour être présents après le processus de suppression de mots vides comme ils sont les opérateurs qui sont nécessaires pour le traitement de texte de la requête. Je ne sais pas qui sont les mots qui peuvent être des opérateurs dans le texte de la requête, et je tiens également à supprimer les mots de mon texte.
- double possible de "mots vides" liste pour l'anglais?
- Si vous ne savez pas quels mots peuvent être des opérateurs, il n'y a aucun moyen de spécifier une liste de mots vides. Sinon, vous devez supprimer les mots vides que vous souhaitez conserver le nltk liste dans @alvas 's réponse et cela devrait le faire.
Vous devez vous connecter pour publier un commentaire.
Je vous suggère de créer votre propre liste de opérateur de mots que vous sortez de la liste de mots vides. Les ensembles peuvent être commodément soustrait, donc:
Ensuite, il suffit de tester si un mot est
in
ounot in
l'ensemble, sans compter que vos opérateurs font partie de la liste de mots vides. Vous pourrez ensuite passer à une autre liste de mots vides ou ajouter un opérateur.Il y a une liste de mots vides dans
NLTK
composé de 2 400 mots vides pour 11 langues (Porter et al), voir http://nltk.org/book/ch02.htmlJe recommande à la recherche à l'aide de tf-idf pour supprimer les mots vides, voir Effets de Issues sur la fréquence des termes?
list
peut être lente. Je suggère de le convertir en unset
de sorte quenot in
sera beaucoup moins cher.@alvas de répondre, en fait le travail, mais il peut être fait de manière plus rapide. En supposant que vous avez
documents
: une liste de chaînes de caractères.Avis qu'en raison du fait que vous êtes ici à la recherche dans un jeu (pas dans une liste) la vitesse serait théoriquement
len(stop_words)/2
fois plus rapide, ce qui est important si vous avez besoin d'opérer à travers de nombreux documents.De 5000 documents d'environ 300 mots, la différence est entre 1,8 secondes pour mon exemple, et 20 secondes pour @alvas de l'.
P. S. dans la plupart des cas, vous devez diviser le texte en mots pour exécuter une autre classification des tâches pour lesquelles tf-idf est utilisé. Donc, très probablement, il serait préférable d'utiliser l'analyseur morphologique ainsi:
et à utiliser
[porter.stem(i.lower()) for i in wordpunct_tokenize(doc) if i.lower() not in stop_words]
à l'intérieur d'une boucle.@alvas a une bonne réponse. Mais encore une fois cela dépend de la nature de la tâche, par exemple dans votre application que vous voulez à considérer tous les
conjunction
par exemple et, ou, mais, si, tout en et tous lesdeterminer
par exemple la, un, certains, la plupart, tous, pas de comme des mots vides en considérant toutes les autres parties du discours comme légitime, alors vous voudrez peut-être regarder dans cette solution, qui utilise une Partie de la Parole Tagset à jeter des mots, Consultez le tableau 5.1:Vous pouvez utiliser chaîne de caractères.la ponctuation avec construit-dans NLTK liste des mots vides:
NLTK mots vides complète liste