home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / pycentral / deskbar-applet / site-packages / deskbar / Indexer.py < prev    next >
Encoding:
Python Source  |  2006-08-29  |  1.3 KB  |  58 lines

  1. """
  2. A simple indexer which splits tokens in a string
  3. """
  4.  
  5. # Check for presence of set to be compatible with python 2.3
  6. try:
  7.     set
  8. except NameError:
  9.     from sets import Set as set
  10.  
  11. STOP_WORDS = {'and': 1, 'that': 1, 'into': 1,
  12.             'but': 1, 'are': 1, 'they': 1,
  13.             'not': 1, 'such': 1, 'with': 1,
  14.             'for': 1, 'these': 1, 'there': 1,
  15.             'this': 1, 'will': 1, 'their': 1,
  16.             'then': 1, 'the': 1, 'was': 1}
  17.                  
  18. class Indexer:
  19.     def __init__(self):
  20.         self.d = {}
  21.  
  22.     def add(self, key, obj):
  23.         key = key.lower()
  24.         for tok in key.split():
  25.             # Filter out some words not worth indexing
  26.             if len(tok) <= 2 or len(tok) >= 25 or tok in STOP_WORDS:
  27.                 continue
  28.             
  29.             if tok in self.d:
  30.                 if not obj in self.d[tok]:
  31.                     self.d[tok].append(obj)
  32.             else:
  33.                 self.d[tok] = [obj]
  34.                         
  35.     def look_up(self, text):
  36.         tokens = [token for token in text.lower().split() if len(token) > 2 and len(token) < 25 and token not in STOP_WORDS]
  37.         
  38.         result = set()
  39.         if len(tokens) == 0:
  40.             return []
  41.         else:
  42.             result.update(self.look_up_token(tokens[0]))
  43.             for token in tokens[1:]:
  44.                 result.intersection_update(self.look_up_token(token))
  45.         
  46.         return list(result)
  47.     
  48.     def look_up_token(self, token):            
  49.         result = set()
  50.         if token == "":
  51.             return result
  52.             
  53.         for key in self.d.keys():
  54.             if key.startswith(token):
  55.                 result.update(set(self.d[key]))
  56.         return result
  57.  
  58.