searching algorithm

Michael Bentley michael at jedimindworks.com
Sat May 12 01:23:41 EDT 2007


On May 11, 2007, at 3:50 AM, Michael Bentley wrote:
>
> Here's an idea:  use a rats' nest of dictionaries and do all the
> lookup work up front when you build the rats' nest.  Maybe something
> like this:
...

Oops!  This is better :-)

#! /usr/bin/env python
import pprint

dictionary = """absinth:pelin
absinthe:pelin
absolute:apsolutan
absolute:apsolutni kod
absolute:apsolutno
absolute:čist
absolute:nesumnjiv
absolute:potpun
absolute:savrsen
absolute coordinates:apsolutne koordinate
absolute frequency:apsolutna učestalost
absolute gap:apsolutni jaz
absolute line spacing:apsolutni međurazmak linija
absolute majority:apsolutna većina
absolute pointing device:apsolutni pokazivački uređaj
absolute quantity:apsolutni udio
absolute value:apsolutna vrijednost
absolute zero:apsolutna nula
absolutely:apsolutno
absolutely:bezuvjetno
absolutely:nezavisno
absolutely:potpuno
absolutely:samostalno
absolutely:sasvim
absolution:odrjesenje
absolution:oprostaj
absolutism:apsolutizam
absolve:odrijesiti
absolve:osloboditi
absorb:absorbirati
absorb:apsorbirati
absorb:crpsti"""

lookup = {'words':{}, 'letters':{}}

for translation in dictionary.split('\n'):
     english, croatian = translation.split(':')
     if english in lookup['words']:
         lookup['words'][english].append(croatian)
     else:
         lookup['words'][english] = [english, croatian]

     for position, letter in enumerate(english):
         if position == 0:
             youAreHere = lookup['letters']

         if letter not in youAreHere:
             youAreHere[letter] = {'words':[]}

	if lookup['words'][english] not in youAreHere[letter]['words']:
	    youAreHere[letter]['words'].append(lookup['words'][english])
         youAreHere = youAreHere[letter]

def tryit(partial):
     youAreHere = lookup['letters']
     for letter in partial:
         youAreHere = youAreHere[letter]
     return youAreHere['words']

if __name__ == '__main__':
     pprint.pprint(tryit('abs'))
     print '=' * 50
     pprint.pprint(tryit('absorb'))




More information about the Python-list mailing list