2016-04-24 6 views
1

Ich bin vertraut mit Python nltk.metrics.distance-Modul, das häufig verwendet wird, um Bearbeitungsabstand von zwei Zeichenfolge zu berechnen.Token-basierte Bearbeitungsentfernung in Python?

Ich interessiere mich für eine Funktion, die eine solche Entfernung berechnet, aber nicht char-weise wie normalerweise aber Token-weise. Damit meine ich, dass Sie nur ganze Token ersetzen/hinzufügen/löschen können (statt Zeichen).

Beispiel regelmäßiger Editierdistanz und meine gewünschten Token versehen Version:

> char_dist("aa bbbb cc", 
      "aa b cc") 
3        # add 'b' character three-times 

> token_dist("aa bbbb cc", 
      "aa b cc") 
1        # replace 'bbbb' token with 'b' token 

Gibt es bereits eine Funktion, dass token_dist in Python berechnen kann? Ich würde lieber etwas verwenden, das bereits implementiert und getestet wurde, als meinen eigenen Code zu schreiben. Danke für Tipps.

Antwort

3

Zuerst installieren Sie die folgenden Schritte aus:

pip install editdistance 

folgendes geben Sie dann den Token-weise Editierdistanz:

import editdistance 
editdistance.eval(list1, list2) 

Beispiel:

import editdistance 
tokens1 = ['aa', 'bb', 'cc'] 
tokens2 = ['a' , 'bb', 'cc'] 
editdistance.eval(tokens1, tokens2) 
out[4]: 1 

Für weitere Informationen, bitte referenzieren:

https://github.com/aflc/editdistance

+1

great! Danke – petrbel

3

NLTK edit_distance des erscheint mit Listen mit Strings genauso gut zu arbeiten:

nltk.edit_distance("aa bbbb cc", "aa b cc") 
> 3 
nltk.edit_distance("aa bbbb cc".split(), "aa b cc".split()) 
> 1