2016-11-19 3 views
0
Dateien zwei CSV betrachten zählen doppelte Werte zwischen

Ich habe 2 CSV-Datei wie unten formatiert:Wie ähnlichen Zeilenwert zu finden und

csv A

Tweet1,pos 
Tweet2,neg 
Tweet2,neg 

csv B

Tweet2,neg 
Tweet2,neg 
Tweet2,pos 

Ich möchte die Anzahl der Ähnlichkeit zwischen Raws

finden

habe ich versucht, diese aber es gibt

def compare(fileA, fileB): 
    a_file = open(fileA, 'r') 
    a_data = a_file.read() 
    a_file.close() 

    b_file = open(fileB, 'r') 
    b_data = b_file.read() 
    b_file.close() 

    # compare the contents 
    a_set = set(a_data.split(',')) 
    b_set = set(b_data.split(',')) 

    return list(a_set.intersection(b_set)) 

print compare('f.csv', 'full-corpus.csv') 

die Unterschiede Nähte sollten Der Ausgang 1

+1

Ihr aktueller Code teilt den gesamten Dateiinhalt mit einem Komma auf. Was Sie tun müssen, ist Linien zu vergleichen. Versuchen Sie also, mit einem '\ n' anstelle von ',' –

+0

@PrateekDewan aufzuteilen, warum die Schnittmenge in 'list (a_set.intersection (b_set))' nicht die Duplikate zählt, zB ** Tweet2, neg ** ist zwei aufgetreten mal in csv A und zwei mal in csv B, warum len das mal überlegen. – Alsphere

+0

Es ist nicht "len". Sets enthalten nur eindeutige Werte. –

Antwort

0

Dies tun den Trick, müssen Sie nur Klassenzähler aus Sammlung importieren und öffnen Sie dann jede Datei als eine Liste.

import csv 
from collections import Counter 
a_list = [] 
with open('1.csv', 'Ur') as a_file: 
    for line in csv.reader(a_file): 
     a_list.append(line[0]+' '+line[1]) 
print a_list 

b_list = [] 
with open('2.csv', 'Ur') as b_file: 
    for line in csv.reader(b_file): 
     b_list.append(line[0]+' '+line[1]) 
print b_list 
counterA = Counter(a_list) 
counterB = Counter(b_list) 
counterSum = counterB & counterA 
print counterA 
print counterB 
print counterB & counterA 
print sum(counterSum.values()) 
0

sein können Sie return len(a_set & b_set) versuchen. & ist der Operator, um Elemente in allen Sätzen zu finden, und die len wird die Anzahl der Elemente in allen Sätzen

+0

Ich verstehe, dass len, aber um sicher zu sein, dass ich auch die Liste zurückgegeben und immer leerer Wert in der zurückgegebenen Liste wie diese ['', 'Tweet2, neg'] für beide Kreuzung und – Alsphere

+0

Ich denke, len sollte -1 sein um den richtigen zu geben. – Alsphere

+0

warum die & nicht zählen die Duplikate Werte zum Beispiel Tweet2, neg aufgetreten zwei Mal in CSV A und zwei Mal in CSV B, warum Len betrachten, dass einmal. – Alsphere