Spinsels op het web
actions » SearchLogin 124 articles • 07 Aug 2008

Article with comments

Saturday, 28 May 2005

permalink Fuzzy (approximate) string compare

Met Fuzzy string compare bedoel ik het vergelijken van twee strings en dan een uitkomst krijgen die aangeeft hoe veel de strings op elkaar lijken. Dat wil zeggen, het is dus geen absolute string compare (die alleen maar aangeeft of 2 strings hetzelfde zijn of niet), maar een meer kwantitatieve string vergelijking.

Het kan gebruikt worden om bijvoorbeeld typefouten uit commando's te halen, een bepaalde vorm van spellingscontrole, of voor andere natuurlijke-taal toepassingen.

Voor Python zijn er een aantal modules beschikbaar die een fuzzy string compare functie bieden.

QUERTY- of proteïne afwijking

Daarnet heeft Rob Hooft op comp.lang.python een interessante module gepost die een algoritme hanteert dat normaal gebruikt wordt voor het vergelijken van proteïnes, maar dus nu op ASCII strings werkt. De uitslag is een float die negatief is als de strings heel erg verschillen en oploopt tot len(s)+1 als de strings precies hetzelfde zijn, de score is op te vatten als 'het aantal overenkomende letters'. Het algorithme gebruikt de layout van het QUERTY toetsenbord om afwijkingen tussen de strings te bepalen en is dus beperkt tot ASCII strings (en alleen zinvol als mensen gebruik maken van een QUERTY toetsenbord), maar daarom wel zeer geschikt om een ingevoerd commando te vergelijken met alle mogelijke commando's die mogelijk zijn en zo typfouten te herkennen. Waarom niet genormaliseerde score 0.0 tot 1.0? Rob: maakt niet uit als je alleen een 'best score' van een rijtje strings wilt hebben. De negatieve resultaten komen voor als de strings niet op elkaar lijken en ook nog eens niet dezelfde lengte hebben.

Hier te vinden: comparestrings.py.

Python standard library

In de standard lib hebben we difflib met de functie get_close_matches. Groot voordeel dat deze dus standaard bij Python zit.

Febrl (biometrisch)

Febrl bevat een aantal string compare functies, waaronder ook de edit distance of Levenshtein distance functie. Van die laatste is ook op Useless Python een implementatie te vinden.

Apse

Een extension module (geschreven in C): Apse. Benodigd: python, SWIG, C compiler.

Java

SecondString is een open-source pakket met Java implementaties van een heleboel string compare algorithmes. Dat moet niet al te moeilijk te porten zijn naar Python.

• Wrote irmen at 23:56 (edited 4×, last on 22 Nov 2005) | read 308× | Add comment

Comments (0)

No comments for this article yet.

Write a comment

Your name  
E-mail   (only visible for blog owner)
Homepage
Text:

[b] [i] [u] [tt] [center] [code] [quote] [url] [url=] [img] [@] [@@] [@:]
detailed help about markup
You must answer the following to be able to submit.
Type the letters you see in the image.
(Unreadable? Click 'Preview' for a new one)

Process times: page=0.040 request=0.059 cpu=0.060