Python: Jaccard-Distanz mit word Schnittpunkt aber nicht Charakter Kreuzung
Konnte ich noch nicht erkennen, dass die Python-set-Funktion tatsächlich Trenn-string in einzelne Zeichen. Ich schrieb python-Funktion für Jaccard und verwendet python Kreuzung Methode. Ich ging zwei Sätze in diese Methode und vor der übergabe der zwei Sätze in mein jaccard-Funktion, die ich verwenden die set-Funktion auf dem setring.
Beispiel: angenommen, ich habe Zeichenfolge NEW Fujifilm 16MP 5x Optical Zoom Point and Shoot CAMERA 2 7 screen.jpg
würde ich set(NEW Fujifilm 16MP 5x Optical Zoom Point and Shoot CAMERA 2 7 screen.jpg)
die getrennte Zeichenfolge in Zeichen. Also, wenn ich Sie senden jaccard-Funktion Schnittpunkt tatsächlich Aussehen, Charakter Kreuzung anstelle von Wort zu Wort Kreuzung. Wie kann ich Wort für Wort Kreuzung.
#implementing jaccard
def jaccard(a, b):
c = a.intersection(b)
return float(len(c)) / (len(a) + len(b) - len(c))
wenn ich nicht anrufen set
Funktion auf meinem string NEW Fujifilm 16MP 5x Optical Zoom Point and Shoot CAMERA 2 7 screen.jpg
bekomme ich die folgende Fehlermeldung:
c = a.intersection(b)
AttributeError: 'str' object has no attribute 'intersection'
Anstelle von Charakter zu Charakter Kreuzung, die ich tun will Wort für Wort Kreuzung und Holen Sie sich die jaccard ähnlichkeit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Teilen Sie Ihren string in Wörter zuerst:
Beispiel:
Meine Funktion zum berechnen Jaccard-Abstand:
Diese Eigenschaft ist nicht eindeutig zu sets:
Was ist Los hier ist, dass die Zeichenfolge behandelt wird, als einer wiederholenden Sequenz und bearbeitet von Zeichen.
Gleiche Sache, die Sie werden sehen, mit set:
Zu beheben, verwenden .add() auf einem bestehenden set, da .add() funktioniert nicht verwenden Sie eine interable:
Oder verwenden Sie split () ein Tupel, eine Liste oder eine andere durchsuchbar, so dass die Zeichenfolge nicht als iterierbar:
Fügen Sie weitere Elemente basierend auf Ihren string auf einer Wort-für-Wort-basis:
Oder, wenn Sie einem das Verständnis für gewisse Logik, wie Sie hinzufügen, um dem Satz:
- Und es funktioniert, wie du erwartest jetzt:
set(a.split()).intersection(b.split())
(modulo Fall-und Zeichensetzung details.)Dies ist die eine, die ich schrieb, basierend auf set-Funktion -