Retrait de la liste de mots à partir d'une chaîne
J'ai une liste de mots vides. Et j'ai une chaîne de recherche. Je veux enlever les mots de la chaîne.
Comme un exemple:
stopwords=['what','who','is','a','at','is','he']
query='What is hello'
Maintenant le code devrait strip "Ce que" et "est". Cependant dans mon cas, c'bandes 'a', ainsi que 'at'. J'ai donné mon code ci-dessous. Que pouvais-je fait de mal?
for word in stopwords:
if word in query:
print word
query=query.replace(word,"")
Si l'entrée de la requête est "qu'est-Ce que Bonjour", j'obtiens le résultat sous la forme:
wht s llo
Pourquoi cela se produit?
Si vous voulez faire le plein de recherche de mots, vous devez être le fractionnement de la
Ok, je vais essayer ça!
query
à une liste, et la recherche. query.split()
Ok, je vais essayer ça!
OriginalL'auteur Rohit Shinde | 2014-08-17
Vous devez vous connecter pour publier un commentaire.
C'est une façon de le faire:
J'ai remarqué que vous souhaitez également supprimer un mot si son bas-de-casse variante est dans la liste, j'ai donc ajouté un appel à
lower()
dans la condition contrôle.Il crée une nouvelle liste avec tous les mots dont le bas-cas de la variante n'est pas trouvé dans les mots vides.
C'est un compréhension de liste.
OriginalL'auteur Robby Cornelissen
Regarder les autres réponses à votre question, j'ai remarqué que l'on vous a dit comment faire ce que vous essayez de le faire, mais ils n'ont pas répondu à la question que vous avez posée à la fin.
Cela se produit parce que .replace() remplace la sous-chaîne vous donner exactement.
par exemple:
donne:
.replace() est essentiellement le fractionnement de la chaîne de la sous-chaîne donnée comme premier paramètre et la joindre avec le deuxième paramètre.
est une logique similaire à:
Si vous étiez toujours vouloir utiliser .remplacer supprimer des mots, vous pourriez penser que l'ajout d'un espace avant et après ce serait suffisant, mais cela laisse de mots au début et à la fin de la chaîne ainsi que ponctué versions de la sous-chaîne.
En outre, l'ajout d'espaces avant et après ne sera pas attraper les doublons comme il a déjà traité la première sous-chaîne et va l'ignorer en faveur de la poursuite sur:
Pour ces raisons votre réponse par Robbie Cornelissen est recommandé de faire ce que vous voulez.
OriginalL'auteur B.Adler
s'appuyant sur ce qui karthikr dit, essayez de
explication:
Pouvez-vous m'expliquer ce que la ligne n'?
pourquoi êtes-vous à l'aide de
list
etsplit(' ')
?je n'ai pas l'origine l'utilisation de la liste, c'était un montage, je n'étais pas sûr de savoir pourquoi il a été une erreur. mettre en pensant peut-être que son objet filtre ne peut pas être utilisée comme un objet iterable dans une version plus ancienne ou quelque chose. split est là pour séparer la chaîne en mots
oui, mais vous n'avez pas besoin de spécifier
' '
, essayez de diviser les'What is hello'
OriginalL'auteur pseudonym
la accepté de répondre fonctionne quand a fourni une liste de mots séparés par des espaces, mais ce n'est pas le cas dans la vraie vie, quand il peut y avoir des signes de ponctuation pour séparer les mots. Dans ce cas
re.split
est nécessaire.Aussi, l'essai contre
stopwords
comme unset
rend la recherche plus rapide (même si il y a un compromis à trouver entre la chaîne de hachage & recherche quand il y a un petit nombre de mots)Ma proposition:
de sortie:
OriginalL'auteur Jean-François Fabre