Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Λοιπόν έχω δύο λίστες με strings την StopUK και την bagofwords. Πρέπει να επιλέξω τυχαία κάποια στοιχεία από την bagofwords τα οποία όμως δεν πρέπει να είναι στην StopUK

 

 

Έχω γράψει το παρακάτω το όποιο όμως δεν δουλεύει...

f= open('/tmp/StopEng.txt')
for line in f:
    StopUK.append(line)
   
for t in range(0,SetWords):
                 
               
                k=random.randint(0,bag_of_words.__len__()-1)
                
                    
                while bag_of_words[k] in StopUK==True:
                    print ('new rand')
                    k=random.randint(0,bag_of_words.__len__()-1)
                    
                print ('random choice',bag_of_words[k])   

Δημοσ.

1. Όταν θες να διαβάσεις αρχεία να χρησιμοποιείς την with. Διάβασε εδώ για λεπτομέρειες. Τα σχετικά με το άνοιγμα αρχείων είναι στο τέλος, αλλά ρίξε ένα μάτι σε όλο για να καταλάβεις πως λειτουργεί το with. Το πλεονέκτημα του ανοίγματος των αρχείων με το with είναι ότι το αρχειο θα κλείσει ακόμα και αν ο κώδικας μέσα στο with block σηκώσει κάποιο Exception.

 

2. Ο πιο εύκολος τρόπος για να βρεις στοιχεία που υπάρχουν σε μία λίστα αλλά δεν υπάρχουν σε μία άλλη, είναι να χρησιμοποιήσεις θεωρία συνόλων (μετέτρεψε τις lists σε sets). Η μέθοδος που ψάχνεις είναι η set.difference.

https://docs.python.org/2/library/stdtypes.html#set

  • Like 1
Δημοσ.

Δεν φαίνεται να λειτουργεί όμως...

 

Βασικά αυτό που θέλω είναι να διαβάζω ένα αρχείο κειμένου και σε μια λίστα Α να βάζω όλες τις λέξεις του αρχείου.

Έχω και μια λίστα την Β και θέλω να φτιάξω μια νέα λιστα Γ που περιέχει όλα τα στοιχεία της Α που δεν ανήκουν στην Β

 

Διαβάζω το αρχείο (λίστα Α) ως εξής

with codecs.open(filepath,'r',encoding='utf8') as f:
                for word in f.read().split():
                    doc_text.append(word)

τα στοιχεία της Β είναι επίσης σε ένα αρχείο. Κάθε γραμμή του αρχείου περιέχει ένα στοιχείο .

with open('/tmp/StopEng.txt') as f:
    for line in f:
        StopUK.append(line)
    

και παίρνω την διαφορά τους ως

  print (doc_text.__len__())
  bag_of_words=list(set(doc_text).difference(set(StopUK)))
  print (bag_of_words.__len__())

Ενώ όμως η bag_of_words έχει μικρότερο μήκος από το doc_text εξακολουθεί να περιέχει  στοιχεία της StopUK

Δημοσ. (επεξεργασμένο)

Όταν θες να βλέπεις το μήκος ενός iterable, χρησιμοποιείς τη len().

import codecs

with codecs.open("foo", "rb", "utf-8") as fd:
    doc_text = fd.read().split()

with codecs.open("goo", "rb", "utf-8") as fd:
    stop_uk = fd.read().split()

bag_of_words = set(doc_text).difference(set(stop_uk))

for word in bag_of_words:
    if word in stop_uk:
        print("problem")    # it will never be executed!
Επεξ/σία από pmav99
  • Like 1
Δημοσ.


import random
with open("bagofwords.txt", 'r') as bag_file, open("stopuk.txt", 'r') as stop_file:
bag = {x.strip() for x in bag_file.readlines()}
stop = {x.strip() for x in stop_file.readlines()}
items = 2 # how many items do you want?
print(random.sample(bag-stop, items))

 

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...