2017-06-28 4 views
1

Ich möchte Text in einer Python-Liste miteinander vergleichen. Zum BeispielTexte in einer Tabelle in Python vergleichen

Url   | text 
      | 
www.xyz.com | " hello bha njik **bhavd bhavd** bjavd manhbd kdkndsik wkjdk" 
      | 
www.abc.com | "bhavye jsbsdv sjbs jcsbjd adjbsd jdfhjdb jdshbjf jdsbjf" 
      | 
www.lokj.com| "bsjgad adhuad jadshjasd kdashda kdajikd kdfsj **bhavd bhavd** " 

Jetzt möchte ich erste Text mit anderen Zeilen zu vergleichen, um zu wissen, wie viele Wörter in den Texten ähnlich sind. und fortschreitend zweite Zeile mit den folgenden Zeilen usw.

Welchen Ansatz sollte ich verwenden und welche Datenstruktur soll ich verwenden?

+0

Möchten Sie nur mit den folgenden Werten vergleichen? Wie ein mit 2 aber nicht 2 mit 1 da hast du den Wert schon? (Also die erste Hälfte der Ähnlichkeitsmatrix) – smagnan

Antwort

0

Beste Weise, die Sie OrderedDict() verwenden können, das nützlich ist, um die Reihenfolge zu erhalten, um die dict keys heraus zu holen.

von auf diesem dict Iterieren, Werte zu vergleichen Sie Ihre Ausgabe

0

Eine mögliche Art und Weise jede Zeichenfolge Umwandlung in eine Reihe von Wörtern könnte erhalten und danach den Durchschnitt der Mengen vergleichen

string_1 = "hello bha njik bhavd bhavd bjavd manhbd kdkndsik wkjdk" 
string_2 = "bhavd dskghfski fjfbhskf ewkjhsdkifs fjuekdjsdf ue" 

# First split your strings into sets of words 
set_1 = set(string_1.split()) 
set_2 = set(string_2.split()) 

# Compare the sets to find where they both have the same value 
print set_1 & set_2 
print set_1.intersection(set_2) 

# Both print out {'bhavd'} 
1

Für python3

Wie in den Kommentaren erläutert, erzeugen wir jedes mögliche Paar, erstellen Sätze, um die Eindeutigkeit von Wörtern sicherzustellen, und zählen einfach die Anzahl der eindeutigen gemeinsamen Wörter für jedes Paar. Diese müssen ein wenig, wenn Ihr Text Listenstruktur ist ein bisschen anders

import itertools 

my_list = ["a text a", "an other text b", "a last text c and so on"] 

def simil(text_a, text_b): 
    # returns the number of common unique words betwene two texts 
    return len(set(text_a.split()).intersection(set(text_b.split()))) 

results = [] 
# for each unique combination of texts 
for pair in itertools.combinations(my_list, r=2): 
    results.append(simil(*pair)) 

print(result) 

Randnotiz angepasst werden: je nachdem, was Sie tun möchten, können Sie auf Algorithmen aussehen wie TFIDF (A simple tutorial) möchten für Texte/Dokumente Ähnlichkeit, oder viele andere ...

Verwandte Themen