#!/usr/bin/python

# Available at http://www.aaronsw.com/2002/synonyms.py
import re
import google # get at http://pygoogle.sourceforge.net/

sb = re.compile('<b>(.*?)</b>', re.DOTALL)

def stripBolds(text, syns):
  for t in sb.findall(text):
    t = t.lower( ).encode('utf-8')
    if t != '...' and t not in syns: syns.append(t)
  return syns

def findSynonyms(q):
  if ' ' in q: raise ValueError, "query must be one word"
  query = "~" + q
  syns = []
  
  while (len(query.split(' ')) <= 10):
    for result in google.doGoogleSearch(query).results:
      syns = stripBolds(result.snippet, syns)
    
    added = False
    for syn in syns:
      if syn in query: continue
      query += " -" + syn
      added = True
      break
    
    if not added: break # nothing left
    
  return syns

if __name__ == "__main_  _":
  import sys

  if len(sys.argv) != 2:
    print "Usage: python " + sys.argv[0] + " query"
  else:
    print findSynonyms(sys.argv[1])