Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: συγκριση αρχειων

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5098

  • nikpol
  • Το Άβαταρ του/της nikpol
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 42
Χαιρετω τους φιλους.
Χρειαζεται να διαβασω μεγαλα κειμενοαρχεια και να μετρησω τις μοναδικες λεξεις που περιεχουν.Το κανω με αυτο
import codecs
c = {}
with open(r"C:\Users\Nikos-PC\Desktop\serlock.txt") as f:
    for line in f:
        #line=line.replace('.',' ')
        for word in line.lower().split():
            key = word.rstrip()
            c[key] = c.get(key, 0) + 1
for key in sorted(c):
    print(key,'\t\t',c[key])
 
#print(c)
επιπλεον χρειαζεται να συγκρινω ανα δυο τα συμβολαια αρχεια και να βρω τις διαφορες τους.Το κανω με αυτο
import sys
import difflib
f=open(r"C:\Users\Nikos-PC\Desktop\serlock.txt",'r')  #anoigma arxeiwn
f1=open(r"C:\Users\Nikos-PC\Desktop\serlock1.txt",'r') #arxeio gia sygkrish 
str1=f.read()
str2=f1.read()  #.replace("."," ").replace("?"," ")
str1=str1.split()  
str2=str2.split()
d=difflib.Differ()     # sygkrish
diff=list(d.compare(str2,str1))
 
for line in diff: #deixnei mono tiw diafores
        #print(line)
        if line.startswith('-'):
            sys.stdout.write(line+'\n')
        elif line.startswith('+'):
            sys.stdout.write('\t\t'+line+'\n') 
#print ('\n'.join(diff)) #ta typvnei ola kai tiw diaforew
 
#sys.stdout.write(str(diff))

Για τα αγγλικα κειμενα που ειναι τα περισοοτερα δουλευουν καλα.Εχουν προβλημα στα ελληνικα και ερχονται και ταιβανεζικα.Δεν μπορω να τα διαβασω,παντα τα encode/decode που χρησιμοποιω σκανε.Υπαρχει καποια γνωμη ,καποια βοηθεια?
ευχαριστω καλο Πασχα
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5099

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
Μια γρήγορη απάντηση, (από πείρα) και επειδή βλέπω ότι δουλεύεις σε Windows, είναι να ανοίξεις τα ελληνικά αρχεία σε "windows-1253".

EDIT
f=open(r"C:\Users\Nikos-PC\Desktop\serlock.txt", mode='r', encoding='windows-1253')

Επίσης μπορείς να ανιχνεύσεις την κωδικοποίηση με αυτό.

Αν αυτό δεν λειτουργήσει, μια λεπτομερής αναφορά στο σφάλμα, θα βοηθούσε και εμάς, να βοηθήσουμε καλύτερα.
Γράφω σε Python 3
Τελευταία διόρθωση: 5 Χρόνια 11 Μήνες πριν από kamar. Αιτία: Προσθήκη κειμένου
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5101

  • nikpol
  • Το Άβαταρ του/της nikpol
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 42
φιλε kamar
με
import sys
sys.stdout.encoding
παιρνω "cp1253",υποθετω ειναι η ιδια κωδικοποιηση με την windows-1253 που προτεινεις.Του δινω
fi=open("C:\\Users\\Nikos-PC\Desktop\\ΠΡΟΣΧΕΔΙΟ.txt", "r", "cp1253" )
kai το λαθος ειναι
Traceback (most recent call last):
File "C:\Users\Nikos-PC\AppData\Local\Programs\Python\Python36-32\pyfiles\readf.py", line 2, in <module>
fi=open("C:\\Users\\Nikos-PC\Desktop\\ΠΡΟΣΧΕΔΙΟ.txt", "r", "cp1253" )
TypeError: an integer is required (got type str)
Ευχαριστω για την απαντηση ,καλο μηνα
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5102

  • kamar
  • Το Άβαταρ του/της kamar
  • Αποσυνδεμένος
  • python
  • Δημοσιεύσεις: 409
  • Ληφθείσες Ευχαριστίες 88
φιλε kamar
με
import sys
sys.stdout.encoding
παιρνω "cp1253",υποθετω ειναι η ιδια κωδικοποιηση με την windows-1253 που προτεινεις.Του δινω
fi=open("C:\\Users\\Nikos-PC\Desktop\\ΠΡΟΣΧΕΔΙΟ.txt", "r", "cp1253" )

Ναι είναι το ίδιο.

Δώσε τις παραμέτρους με ονόματα:
fi=open("C:\\Users\\Nikos-PC\Desktop\\ΠΡΟΣΧΕΔΙΟ.txt", mode="r", encoding="cp1253" )
Γιατί στη δεύτερη θέση περιμένει ακέραιο σύμφωνα με την τεκμηρίωση, για το bufffering.

Επίσης διάβασε την τεκμηρίωση της open().

https://docs.python.org/3/library/functions.html#open
Γράφω σε Python 3
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5106

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Γειά και από μένα

Η lib collections έχει μια class την Counter που μετράει πράγματα από iterables ή maps
docs.python.org/3/library/collections.html#collections.Counter
To πρώτο παράδειγμα τυχαίνει να είναι αυτό
>>> # Find the ten most common words in Hamlet
>>> import re
>>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
>>> Counter(words).most_common(10)
[('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
 ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]
Η γνώμη μου είναι εφόσον πρόκειται για ελληνικά κείμενα αν θές να βγάλεις και τονισμούς πριν το μέτρημα
η συνάρτηση είναι αυτή
 
def remove_accents(input_str):
    nfkd_form = unicodedata.normalize('NFKD', input_str)
    return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
Τελευταία διόρθωση: 5 Χρόνια 11 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5107

  • nikpol
  • Το Άβαταρ του/της nikpol
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 42
Γεια σου Theo,ola kala?
Οσον αφορα το μετρημα,μετραω μοναδικες λεξεις μαζι με τα παραφερναλια τους(τονισμο,σημεια στιξης κλπ)Καπως ετσι
increased 1
indebted 1
indeed 5
indeed! 1
indeed, 4
indeed. 1
indeed? 1
indeed?" 2
index, 1
indicated 2
indication 1
indications 1
indirect 1
indiscretion." 1
inextricable 1
inflamed 1
influence 2
informality 1
information 1
information. 1
στις διαφορες των δυο αρχειων βγαζω κατι τετοιο
- bately.
+ lately.
- meraly
+ merely
- friday
+ Thursday
- roommate."
+ room."



Στα αγγλικα δεν εχουν προβλημα τα παραπανω.Στα ελληνικα και σε οτι αλλο ερθει σε κειμενο για συγκριση,εκει κολλαω.Αναρωτιεμαι αν υπαρχει ενιαιος τροπος να διαβασει καποιος οτι γλωσσα και να ερθει
Σε ελληνικο κειμενο το διαβαζω
with open("C:\\Users\\Nikos-PC\\Desktop\\ΠΡΟΣΧΕΔΙΟ1.txt", mode='r',buffering=-1,errors='ignore') as fi:
for line in fi:
line=line.encode('utf-8')

print(line)
και το output den diabazetai ,einai x\00\x01\...klp
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5108

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Γεια σου Νίκο

Αν αυτό που παίρνεις είναι αυτό που θέλεις σχετικά με το μέτρημα τότε όλα καλά
Αν εφαρμόσεις τον κώδικα με την Counter θα σου βγάλεις πχ indeed 14 θα τα δει σαν λέξη μόνο, δηλαδή χωρίς να λαμβάνει υπόψη τι έχει στο τέλος ή στην αρχή

Τώρα για τα ελληνικά
η open από ότι διαβάζω χρησιμοποιεί default encoding το locale.getpreferredencoding()
docs.python.org/3/library/functions.html#open
encoding is the name of the encoding used to decode or encode the file. This should only be used in text mode. The default encoding is platform dependent (whatever locale.getpreferredencoding() returns), but any text encoding supported by Python can be used.
Εγώ θα έλεγα να χρησιμοποιήσεις στην open την παράμετρο encoding="utf-8"
Μετά εκεί που διαβάζεις το κείμενο θα πρέπει να είναι επίσης ένα encoding που υποστηρίζει τη γλώσσα και πάλι καλύτερο βλέπω το utf-8, στα windows console νομίζω είναι chcp 65001

Τώρα το line.encode που κάνεις κάνει το text bytes, και νομίζω είναι λογικό να μην το διαβάζει γιατί στο byte δεν χωράει ελληνικός χαρακτήρας, χρειάζεται περισσότερα bytes και η print σου εκτυπώνει byte byte
>>> a="Καλημέρα Ελλάδα"
>>> b=a.encode("utf-8")
>>> print(b)
b'\xce\x9a\xce\xb1\xce\xbb\xce\xb7\xce\xbc\xce\xad\xcf\x81\xce\xb1 \xce\x95\xce\xbb\xce\xbb\xce\xac\xce\xb4\xce\xb1'
>>> len(b)
29
>>> len(a)
15
>>> 
 
Τελευταία διόρθωση: 5 Χρόνια 11 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": nikpol

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5109

  • nikpol
  • Το Άβαταρ του/της nikpol
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 42
Κανει κατι κολπα περιεργα.Κοιτα οταν τρεχει αυτο
import codecs
import sys
from struct import * 
a=sys.stdout.encoding
print(a)
 
with open("C:\\Users\\Nikos-PC\\Desktop\\nays.txt", mode='r',buffering=-1,errors='ignore') as fi:
 
    for line in fi:
        [b]line=line.encode('utf-8')[/b]
 
        print(line)
βγαζει τετοια
RESTART: C:\Users\Nikos-PC\AppData\Local\Programs\Python\Python36-32\pyfiles\readf.py
cp1253
b'\xce\xbf\xc2\xbb\xce\x8f\xce\x9e\xc2\xa4\xce\x9e\xce\x8f \xce\x9f\xc6\x92\xce\x9f\xce\x9f\xc6\x92\xce\x9f\xe2\x80\x9e\xce\x9e\xc2\xb7\xce\x9e\xce\x8c\xce\x9e\xc2\xb1 \xce\x9f\xe2\x80\x9e\xce\x9f\xe2\x80\xb0\xce\x9e\xc2\xbd \xce\x9e\xce\x84\xce\x9e\xce\x89\xce\x9e\xc2\xb1\xce\x9f\xc6\x92\xce\x9e\xce\x8a\xce\x9e\xc2\xad\xce\x9f\xce\x9e\xc2\xb5\xce\x9f\xe2\x80\xb0\xce\x9e\xc2\xbd \xce\x9e\xc2\xb1\xce\x9f\xe2\x82\xac\xce\x9e\xce\x8f\xce\x9f\xe2\x80\x9e\xce\x9e\xc2\xb5\xce\x9e\xc2\xbb\xce\x9e\xce\x8f\xce\x9f\xce\x9f\xc6\x92\xce\x9e\xc2\xb5 \xce\x9e\xce\x8c\xce\x9e\xce\x89\xce\x9e\xc2\xb1 \xce\x9e\xc2\xb1\xce\x9f\xe2\x82\xac\xce\x9e\xce\x8f\xce\x9e\xce\x8a\xce\x9e\xc2\xbb\xce\x9e\xc2\xb5\xce\x9e\xce\x89\xce\x9f\xc6\x92\xce\x9f\xe2\x80\x9e\xce\x9e\xce\x89\xce\x9e\xce\x8a\xce\x9e\xc2\xac \xce\x9e\xc2\xb2\xce\x9f\xce\x9e\xc2\xb5\xce\x9f\xe2\x80\x9e\xce\x9e\xc2\xb1\xce\x9e\xc2\xbd\xce\x9e\xce\x89\xce\x9e\xce\x8a\xce\x9e\xc2\xae \xce\x9e\xc2\xb5\xce\x9f\xe2\x82\xac\xce\x9e\xce\x89\xce\x9e\xc2\xbd\xce\x9f\xce\x9e\xc2\xb7\xce\x9f\xc6\x92\xce\x9e\xc2\xb7, \xce\x9f\xe2\x82\xac\xce\x9e\xce\x8f\xce\x9f\xe2\x80\xa6 \xce\x9e\xc2\xb5\xce\x9f\xe2\x80\xa0\xce\x9e\xc2\xb1\xce\x9f\xce\x9e\xce\x8c\xce\x9f\xce\x9f\xc6\x92\xce\x9e\xce\x88\xce\x9e\xc2\xb7\xce\x9e\xce\x8a\xce\x9e\xc2\xb5 \xce\x9f\xe2\x80\x9e\xce\x9e\xc2\xb7 \xce\x9f\xe2\x82\xac\xce\x9e\xc2\xb5\xce\x9f\xce\x9e\xe2\x80\x95\xce\x9e\xce\x8f\xce
otan τρεχει με το encoding sto ανοιγμα του αρχειου
import codecs
import sys
from struct import * 
a=sys.stdout.encoding
print(a)
 
with open("C:\\Users\\Nikos-PC\\Desktop\\nays.txt", mode='r',buffering=-1[b],encoding='utf8'[/b],errors='ignore') as fi:
 
    for line in fi:
        #line=line.encode('utf-8')
 
        print(line)
βγαζει τα σωστα
RESTART: C:\Users\Nikos-PC\AppData\Local\Programs\Python\Python36-32\pyfiles\readf.py
cp1253
Το σύστημα των διασκέψεων αποτελούσε μια αποκλειστικά βρετανική επινόηση, που εφαρμόσθηκε τη περίοδο της κυριαρχίας της βρετανικής ναυσιπλοΐας στο χώρο της εμπορικής ναυτιλίας. Η εμφάνιση των ξένων ανταγωνιστών και η ένταξή τους στις διασκέψεις έγινε με τέτοιο τρόπο, που και πάλι ευνοήθηκε η βρετανική κυριαρχία. Για την ανατροπή αυτής της κυριαρχίας άρχισε η συνένωση επιχειρήσεων με κοινά συμφέροντα κοινοπραξίας ,που μπορούσαν να εκμεταλλευτούν τις οικονομίες κλίμακας και πιθανόν να εξασφαλίσουν μονοπώλια σε κάποιες περιοχές. ΄Ετσι το 1880 μεγάλες ανεξάρτητες εταιρίες όπως η British I

οπως πολυ σωστα μου ειπες
και παλι σευχαριστω
Τελευταία διόρθωση: 5 Χρόνια 11 Μήνες πριν από nikpol.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5110

  • Theo
  • Το Άβαταρ του/της Theo
  • Αποσυνδεμένος
  • pytho_
  • Δημοσιεύσεις: 249
  • Ληφθείσες Ευχαριστίες 70
Σωστά το βγάζει. Αν κάνει uncomment τη γραμμή με το encode θα πάρεις πάλι bytes

Για να πάρεις το encoding της open χρησιμοποιήσε το locale.getpreferredencoding()
είναι διαφορετικό από το sys.stdout.encoding που δίνει το encoding της stdout
Τελευταία διόρθωση: 5 Χρόνια 11 Μήνες πριν από Theo.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

συγκριση αρχειων 5 Χρόνια 11 Μήνες πριν #5112

  • nikpol
  • Το Άβαταρ του/της nikpol
  • Αποσυνδεμένος
  • pyt___
  • Δημοσιεύσεις: 42
Theo καλημερα
η stdout και η Locale δινουν το ιδιο
RESTART: C:/Users/Nikos-PC/AppData/Local/Programs/Python/Python36-32/pyfiles/codec.py
sys.stdout.encoding cp1253
locale.getpreferredencoding() cp1253
>>>

Τελικα για να κανω αυτο που θελω πρεπει να βαζω το input αρχειο σε .txt kai na το σωσω με κωδικοποιηση utf8,oxi thn default ansi twn win.

Σε χαιρετω
Νικος
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.446 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου