0
votes

Comment supprimer des mots spécifiques d'une phrase dans le fichier texte?

J'ai deux fichiers texte. Le 1er fichier contient des phrases en anglais et le 2ème fichier contient un certain nombre de mots anglais (vocabulaire). Je veux supprimer ces mots des phrases du 1er fichier qui ne sont pas présents dans le vocabulaire, puis pour enregistrer le texte traité dans le 1er fichier.

J'ai écrit le code à partir de laquelle je suis capable d'obtenir ces phrases qui Contient les mots qui ne sont pas disponibles dans notre 2e fichier (vocabulaire).

Voici mon code: xxx

Cependant, je ne suis pas capable de supprimer ces mots.


5 commentaires

Quelle est la taille de vos fichiers? Quel est le format du deuxième fichier (un mot par ligne, séparé par des virgules, etc.?)


ARG Vous allez lire le fichier autant de fois qu'il existe des mots dans votre phrase. Si Word in Open ("vocab30000.txt"). Lire (): : Créez un jeu de mots à la place et vérifiez: faites-la une fois: word_set = {x pour la ligne dans File_Handle Pour x en ligne.split () file_handle donne le résultat de Ouvrir


@ Jean-Françoisefabre bon de voir cette bonne approche de "Créer un jeu de mots à la place en mémoire et de vérifier"!


@gMDS Mon fichier 1ST contient environ 1.2 Lakh Anglais phrases et 2ème fichier contient 1,8 lakh français mots séparés par une nouvelle ligne (un mot par ligne).


@Sandeep Anglais Les chiffres seraient bons! Quoi qu'il en soit, vérifiez ma réponse ...


3 Réponses :


0
votes

Cela devrait fonctionner:

with open('vocab30000.txt') as f:
    vocabulary = set(word.strip() for word in f.readlines())

with open('eng.txt', 'r+') as f:
    data = [line.strip().split(' ') for line in f.readlines()]
    removed = [[word for word in line if word in vocabulary] for line in data]
    result = '\n'.join(' '.join(word for word in line) for line in removed)
    f.seek(0)
    f.write(result)
    f.truncate()


5 commentaires

Ce code ne résout pas mon problème. Supposons eng.txt contenir une phrase "J'habite à Mumbai" et Vocab.txt contient des mots (i, en direct, dans) séparés par une nouvelle ligne. Donc, je veux la sortie seulement "je vis dans" dans mon fichier fre.txt. Je veux supprimer le mot "Mumbai" de ma phrase car il n'est pas disponible dans mon vocab.txt.


@Sandeep a changé quelque chose, essayez à nouveau.


Merci pour votre réponse rapide. Ce code fonctionne, mais il supprimait également le dernier mot de chaque phrase car le dernier mot contient \ n comme celui-ci ['Network', 'Options \ n'] tandis que Word Options est disponible dans mon VOCAB30000.TXT. J'ai essayé [x.replace ('\ n', '') pour x en données] mais cela ne pourrait pas résoudre mon problème. Pouvez-vous m'aider s'il vous plaît?


@Sandeep essayer à nouveau maintenant; J'ai réalisé que j'ai appelé bande sur le vocabulaire pour résoudre ce problème mais j'ai oublié de faire la même chose sur les données.


Ce code ne séparait pas le "." ou ',' du mot. Lorsque j'exécute ce code pour une phrase unique et une variable de données d'impression, j'ai reçu ce type de sortie: [«Non-réseau», 'Ouvrir,', 'Remboursement.'] Mais j'ai besoin de sortie comme ceci: [non-réseau ' , 'Open', ',', 'Remboursement', '.']. Que devrais-je changer dans ce code pour obtenir ceci?



0
votes
#Read the two files

with open('vocab30000.txt') as f:
    vocabulary = f.readlines()

with open('eng.txt', 'r+') as f:
    eng = f.readlines()

vocab_sentences = [i.split(" ") for i in vocabulary]
eng = [i.split(" ") for i in eng]

cleaned_sentences = []
# loop over the sentences and exclude words in eng
for sent in vocab_sentences:
    cleaned_sentences.append(" ".join([i for i in sent if i not in eng]))
#write the file
with open('vocab30000.txt', 'w') as f:
    f.writelines(cleaned_sentences)

1 commentaires

J'ai couru ce code mais ce code ne fonctionne pas comme je le souhaite. Je veux supprimer un nouveau mot de mon eng.txt qui contient les phrases et enregistrer ce fichier comme le même nom fre.txt



0
votes

Vous pouvez essayer ce code. J'ai essayé de ne pas utiliser de boucles pour enregistrer votre exécution si vous avez des fichiers plus grands.

import re

with open('eng.txt', 'r') as f:
    s = f.read()
s_copy = s

punctuation = [".","\"",",","-","(",")","[","]"]

pattern = re.compile("\\b("+"|".join(punctuation)+")\\W", re.I)
s_copy = pattern.sub(" ", s_copy)
s_copy = s_copy.replace("\"","")
s_words = s_copy.split(" ")

with open('vocab30000.txt', 'r') as f:
    check_words = f.read()

remove_words = list(set(s_words) - set(check_words))

pattern = re.compile("\\b("+"|".join(remove_words[1:])+")\\W", re.I)
pattern.sub("", s)


0 commentaires