Jaccard-Sim manuell#
t = [ "Hallo Welt!", "Hallo Johannes", "Hallo Hallo", "Wie geht es Dir?" ]
t
['Hallo Welt!', 'Hallo Johannes', 'Hallo Hallo', 'Wie geht es Dir?']
def ngram3(x, n=3):
"""Gibt alle 3-Gramme des Strings x zurück"""
ergebnis = []
for i in range(len(x)-n+1):
a = x[i:i+n]
#print( a )
ergebnis.append( a )
return set(ergebnis)
ngram3("Hallo")
{'Hal', 'all', 'llo'}
t2 = [ ngram3(z) for z in t ]
print( t2 )
[{'lt!', 'all', 'llo', 'Wel', 'o W', 'lo ', 'elt', ' We', 'Hal'}, {'all', 'llo', ' Jo', 'Joh', 'nes', 'nne', 'oha', 'o J', 'lo ', 'han', 'ann', 'Hal'}, {'all', 'llo', 'lo ', ' Ha', 'o H', 'Hal'}, {'ir?', 'geh', 'e g', ' es', 'eht', 'ie ', 'Dir', 't e', 's D', 'ht ', 'Wie', ' ge', ' Di', 'es '}]
x = "Hallo"
n = 3
ergebnis = []
for i in range(len(x)-3+1):
a = x[i:i+n]
#print( a )
ergebnis.append( a )
ergebnis
['Hal', 'all', 'llo']
def sim(x, y):
return len(x) / len(y)
def jsim(x, y):
"""jaccard sim, mit x und y ist eine Menge"""
return len( x.intersection(y) ) / len( x.union(y) )
import pandas as pd
import numpy as np
# Initialisieren Sie eine leere Matrix (Liste von Listen)
n = len(t)
similarity_matrix_data = []
# Berechnen Sie die Ähnlichkeiten für jedes Paar (i, j)
for i in range(n):
row = []
for j in range(n):
# Die Ähnlichkeit ist sim(t[i], t[j])
similarity_value = jsim(t2[i], t2[j])
row.append(similarity_value)
similarity_matrix_data.append(row)
similarity_matrix_data
[[1.0, 0.23529411764705882, 0.36363636363636365, 0.0],
[0.23529411764705882, 1.0, 0.2857142857142857, 0.0],
[0.36363636363636365, 0.2857142857142857, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]]
df = pd.DataFrame(similarity_matrix_data)
df
| 0 | 1 | 2 | 3 | |
|---|---|---|---|---|
| 0 | 1.000000 | 0.235294 | 0.363636 | 0.0 |
| 1 | 0.235294 | 1.000000 | 0.285714 | 0.0 |
| 2 | 0.363636 | 0.285714 | 1.000000 | 0.0 |
| 3 | 0.000000 | 0.000000 | 0.000000 | 1.0 |