web-dev-qa-db-fra.com

Comment retourner des mots uniques du fichier texte en utilisant Python

Comment renvoyer tous les mots uniques d'un fichier texte à l'aide de Python? Par exemple:

Je ne suis pas un robot

Je suis un humain

Devrait retourner:

Je

un m

ne pas

une

robot

humain

Voici ce que j'ai fait jusqu'à présent:

def unique_file(input_filename, output_filename):
    input_file = open(input_filename, 'r')
    file_contents = input_file.read()
    input_file.close()
    Word_list = file_contents.split()

    file = open(output_filename, 'w')

    for Word in Word_list:
        if Word not in Word_list:
            file.write(str(Word) + "\n")
    file.close()

Le fichier texte créé par Python ne contient rien. Je ne suis pas sûr de ce que je fais mal

6
user927584
for Word in Word_list:
    if Word not in Word_list:

chaque Word est en Word_list, par définition à partir de la première ligne.

Au lieu de cette logique, utilisez un set :

unique_words = set(Word_list)
for Word in unique_words:
    file.write(str(Word) + "\n")

sets ne compte que des membres uniques, ce que vous essayez d’atteindre.

Notez que l'ordre ne sera pas conservé, mais vous ne préciserez pas s'il s'agit d'une exigence.

9
mhlester

Il vous suffit de parcourir les lignes du fichier et d'utiliser set pour ne conserver que les uniques.

from itertools import chain

def unique_words(lines):
    return set(chain(*(line.split() for line in lines if line)))

Procédez ensuite comme suit pour lire toutes les lignes uniques d’un fichier et les imprimer.

with open(filename, 'r') as f:
    print(unique_words(f))
4
agrinh

Cela semble être une application typique pour une collection:

...
import collections
d = collections.OrderedDict()
for Word in wordlist: d[Word] = None 
# use this if you also want to count the words:
# for Word in wordlist: d[Word] = d.get(Word, 0) + 1 
for k in d.keys(): print k

Vous pouvez également utiliser une collection.Counter (), qui comptera également les éléments que vous alimentez. L'ordre des mots serait perdu. J'ai ajouté une ligne pour compter et garder la commande.

1
sebio
string = "I am not a robot\n I am a human"
list_str = string.split()
print list(set(list_str))
1
frp farhan
def unique_file(input_filename, output_filename):
    input_file = open(input_filename, 'r')
    file_contents = input_file.read()
    input_file.close()
    duplicates = []
    Word_list = file_contents.split()
    file = open(output_filename, 'w')
    for Word in Word_list:
        if Word not in duplicates:
            duplicates.append(Word)
            file.write(str(Word) + "\n")
    file.close()

Ce code parcourt chaque mot. S'il ne figure pas dans une liste duplicates, il ajoute le mot et l'écrit dans un fichier.

1
A.J. Uppal

Utiliser Regex et Set:

import re
words = re.findall('\w+', text.lower())
uniq_words = set(words)

Une autre méthode consiste à créer un dict et à insérer les mots tels que des clés:

for i in range(len(doc)):
        frase = doc[i].split(" ")
        for palavra in frase:
            if palavra not in dict_Word:
                dict_Word[palavra] = 1
print dict_Word.keys()
1
Washington Luiz

Utilisez un ensemble. Vous n'avez rien d'importer à faire pour cela.

#Open the file
my_File = open(file_Name, 'r')
#Read the file
read_File = my_File.read()
#Split the words
words = read_File.split()
#Using a set will only save the unique words
unique_words = set(words)
#You can then print the set as a whole or loop through the set etc
for Word in unique_words:
     print(Word)
0
joshua riddle

Le problème avec votre code est Word_list a déjà tous les mots possibles du fichier d'entrée. Lorsque vous parcourez la boucle, vous vérifiez si un mot dans Word_list n’est pas présent. Donc ça va toujours être faux. Cela devrait fonctionner .. (Notez que cela préservera également l'ordre).

def unique_file(input_filename, output_filename):
  z = []
  with open(input_filename,'r') as fileIn, open(output_filename,'w') as fileOut:
      for line in fileIn:
          for Word in line.split():
              if Word not in z:
                 z.append(Word)
                 fileOut.write(Word+'\n')
0
user2963623