fugrep – unscharfe Suche

Ich hatte die Idee, sowas wie grep haben zu wollen, mit dem man aber unscharf suchen kann. Fuzzy Search also. Durch die Wikipedia-Beschreibung der  Levenshtein-Distance bin ich nicht ganz durchgestiegen. Zum Glück schaute ich mal mit apt-get, was es an Paketen schon gibt, und stieß auf das Paket »python-levenshtein«.

Folgendes kleines Script »fugrep« ist ein erster Versuch einer Realisierung. Wobei mir noch nicht ganz klar ist, wozu ich es jetzt sinnvoll einsetzen kann :-).

#!/usr/bin/env python
# This Python file uses the following encoding: utf-8

# Idea: second parameter to provide minimum Levenshtein distance for output

import sys
from Levenshtein import *
import argparse

desc = """
fugrep is a fuzzy search tool.
It prefixes ever line of input (stdin) with the Levenshtein distance between the line and the search string parameter.
The output can be sorted or filtered by other tools.

Example: find . -name \*php -printf "%f\n" | fugrep book | sort -n | uniq | head
"""

parser = argparse.ArgumentParser(description=desc)
parser.add_argument('search', type=str, nargs=1)
args = parser.parse_args()
search = args.search[0]

for line in sys.stdin:
   line = line.rstrip("\n")	
   print "%d %s" % (distance(line, search), line)

Eventuell wäre es sinnvoll, das ganze doch in ein Programm abzuändern, das alle Worte eines Files unscharf mit dem Suchwort abgleicht. Aber ob man DAS dann sinnvoll einsetzen kann, ist dann die sich auch daran anschließende Frage.