2017-06-08 1 views
0

J'ai une chaîne de texte et je veux remplacer deux mots par un seul mot. Par exemple. si le mot est artificial intelligence, je veux le remplacer par artificial_intelligence. Cela doit être fait pour une liste de 200 mots et sur un fichier texte de taille 5 mb. J'ai essayé string.replace mais il ne peut fonctionner que pour un élément, pas pour la liste.Chaîne pour remplacer le python de remplacement

Exemple

Text = 'intelligence artificielle est utile pour nous dans toutes les situations d'apprentissage en profondeur.'

Text.replace('Artificial intelligence','Artificial_intelligence') fonctionne. Mais

For I in range(len(Lista)): 
Text=Text.replace(Lista[I],List b[I]) 

ne fonctionne pas.

+0

200 mots ne ressemblent pas beaucoup, avez-vous essayé d'utiliser Sublime Text et faire une simple recherche/remplacement? –

+0

En fait, j'ai 98 tels fichiers .. il sera trop long pour mettre à jour manuellement tous :) –

+0

Ok, mais c'est juste un remplacement 'une fois'? Si c'est le cas, je vous recommande toujours d'utiliser du texte sublime et de faire un Ctrl + Maj + F et de remplacer toutes les occurrences. –

Répondre

3

Je suggère d'utiliser un dict pour vos remplacements:

text = "Artificial intelligence is useful for us in every situation of deep learning." 
replacements = {"Artificial intelligence" : "Artificial_intelligence", 
       "deep learning" : "deep_learning"} 

Ensuite, votre approche fonctionne (bien qu'il est sensible à la casse):

>>> for rep in replacements: 
     text = text.replace(rep, replacements[rep]) 
>>> print(text) 
Artificial_intelligence is useful for us in every situation of deep_learning. 

Pour d'autres approches (comme le regex- suggéré approche), jetez un oeil à SO: Python replace multiple strings.

0

Puisque vous avez un problème de cas entre les entrées de votre liste et votre chaîne, vous pouvez utiliser la fonction re.sub() avec IGNORECASE drapeau pour obtenir ce que vous voulez:

import re 

list_a = ['Artificial intelligence', 'Deep learning'] 
list_b = ['artificial_intelligence', 'deep_learning'] 
text = 'Artificial intelligence is useful for us in every situation of deep learning.' 

for from_, to in zip(list_a, list_b): 
    text = re.sub(from_, to, text, flags=re.IGNORECASE) 

print(text) 
# artificial_intelligence is useful for us in every situation of deep_learning. 

Notez l'utilisation de la wich fonction zip() permet de parcourir les deux listes en même temps.


Notez également que Christian a raison, un dict serait plus approprié pour vos données de substitution. Le code précédent serait alors le suivant pour le même résultat:

import re 

subs = {'Artificial intelligence': 'artificial_intelligence', 
     'Deep learning': 'deep_learning'} 
text = 'Artificial intelligence is useful for us in every situation of deep learning.' 

for from_, to in subs.items(): 
    text = re.sub(from_, to, text, flags=re.IGNORECASE) 

print(text)