Python

2014-04-10 21 views
5
kullanarak metin dosyasından benzersiz sözcükler nasıl döndürülür

Python'u kullanarak tüm benzersiz kelimeleri bir metin dosyasından nasıl döndürebilirim? Örneğin :Python

ben robot değilim

Ben bir insan

dönmelidir duyuyorum:

Ben

am

değil

bir İşte

Bugüne kadar yaptığım budur

robotu

insan:

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() 

metin Python oluşturur herhangi bir husus vardır dosya. Ben ilk satırından tanımı gereği yanlış

cevap

9
for word in word_list: 
    if word not in word_list: 

her word, word_list olduğunu yapıyorum emin değilim. size ulaşmak için çalışıyoruz tam olarak ne olduğu,

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

set benzersiz üyeleri tutun sadece s:

Bunun yerine mantık, bir set kullanın.

Siparişin korunmayacağını unutmayın, ancak bunun bir gereksinim olup olmadığını belirtmediniz.

+1

Ne yazık ki, set komutunu kullanamazsınız. – user927584

+1

Ev ödeviyle ilgili sorularınızda sorun yaşamadım, ancak bir şeyi yapmanın doğru yolu keyfi olarak izin verilmediğinde kısıtlamaları açıkça tanımlamanız gerekiyor. – mhlester

+0

Hatam, herhangi bir yöntemi kullanabiliriz. 30 dakika önce bir e-posta aldım. – user927584

1
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() 

Bu kod her kelime üzerinde döngüler ve bir listede duplicates değilse, o kelimeyi ekler ve bir dosyaya yazar.

+0

Ekstra bir liste yerine kullanmak mümkün: 'file = open (output_filename, 'a')'? (Bu benim ilk kodum (çalışmadı)) – user927584

0

Kodunuzdaki sorun, word_list'in zaten girdi dosyasının tüm olası sözcükleri vardır. Döngü üzerinde yineleme yaparken, temelde word_list'deki bir kelimenin kendi içinde bulunup bulunmadığını kontrol edersiniz. Yani her zaman yanlış olur. Bu çalışmalıdır .. (Bu ayrıca siparişi koruyacağına dikkat edin).

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') 
3

Sadece dosyadaki satırların üzerinde yineleyin ve yalnızca benzersiz olanları korumak için kullanın.

... 
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 

Yapabilirsin:

from itertools import chain 

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

Sonra sadece bir dosyadan tüm benzersiz satırları okumak ve onları

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

Bu koleksiyon için tipik bir uygulama gibi görünüyor yazdırmak için aşağıdakileri yapın ayrıca bir koleksiyon kullanın.İçeri beslediğiniz öğeleri de sayacak Sayaç(). Kelimelerin sırası yine de kaybolacaktı. Siparişi saymak ve saklamak için bir satır ekledim.

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

Diğer yolu Dict oluşturma ve anahtarlar gibi kelimeler ekleyerek edilir:

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

. Bunu yapmak için hiçbir şeyi almanıza gerek yoktur. Bu ödev döngü becerileri için lütfen sayfamızı geliştirmektir olarak

#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

kullanın kümesi Regex ve Set kullanma

0
string = "I am not a robot\n I am a human" 
list_str = string.split() 
print list(set(list_str)) 
+0

OP'nin örnek girişinde bile çalışmıyor. İpucu: '.split()' '.split ('')' – trentcl

+0

@trentcl hwz'den şimdi farklı mı? ... thnx ur noktası oldu ..., gerçekten .split() arasında güzel bir nokta farkı var ve '.split ('')' –

+0

Daha iyi, ama dürüst olmak gerekirse, bu soru 3 yaşın üzerindedir ve kabul edilen cevap temelde sizinkiyle aynıdır, açıklamanın dışında, o yüzden onu yerine getirdim. Eklemek için yapıcı bir şeyiniz varsa, belki de tüm dosyayı ilk önce belleğe yüklemeden set oluşturmak gibi, bu iyi bir cevap olacaktır; Eğer sadece "set' set "ine doğru kayıyorsa, neden rahatsız olduğunu bilmiyorum. – trentcl