summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Robinson <joe@lc8n.com>2014-09-24 01:20:40 +0100
committerJoe Robinson <joe@lc8n.com>2014-09-24 01:20:40 +0100
commite04bd0c36d530729b268f1710113515af44d3ccb (patch)
tree944212b532b9f5c7350b173d15cb7e6eeabcb1d0
parent2049b91d89e249690c2dc26be644e697a8c066fb (diff)
parentbae7d4777f46144750ed3d709e45da283c1f3516 (diff)
Merge branch 'master' of blatech.co.uk:wjoe/bladictionary2
-rwxr-xr-xbladictionary.py65
1 files changed, 53 insertions, 12 deletions
diff --git a/bladictionary.py b/bladictionary.py
index 6cdaa03..6d16240 100755
--- a/bladictionary.py
+++ b/bladictionary.py
@@ -6,8 +6,9 @@ import shlex
import optparse
from lxml import etree
import sqlite3
+import requests
-VERSION = "2.2.2"
+VERSION = "2.3.4"
class Definition(object):
#ID is relative to the word type, eg noun 1, noun 2, verb 1, verb 2, not to the entire list
@@ -146,13 +147,13 @@ def parse_args():
if not args:
args = shlex.split(sys.stdin.read())
- parser = optparse.OptionParser( usage = "!define <term> <type> <dictionary>" )
+ parser = optparse.OptionParser( usage = "!define <term> [type] [dictionary] | types: noun, verb, adjective, adverb | dictionaries: wordnet, oed, foldoc, urban" )
parser.add_option( "-v", "--version", action = "store_true", help = "Print the version number" )
parser.add_option( "-c", "--channel", action = "store", help = "The IRC channel of the request")
options, args = parser.parse_args( args )
types = ["n", "noun", "v", "verb", "adj", "adjective", "adv", "adverb", "tech"]
- dicts = ["wn", "wordnet", "oed", "db", "foldoc"]
+ dicts = ["wn", "wordnet", "oed", "db", "foldoc", "urban"]
word = ""
word_type = ""
@@ -293,11 +294,22 @@ def get_sql(word):
rows = cur.fetchall()
for row in rows:
- item = Definition(row['word'], row['sub_id'], "db", types[row['type_id']-1], row['definition'], [], row['synset_id'], [])
- cur.execute("SELECT * from uses where definition_id = ?", [row['id']])
- rows = cur.fetchall()
- item.uses = rows
+ id = row['id']
+ word = row['word']
+ sub_id = row['sub_id']
+ type = types[row['type_id']-1]
+ definition = row['definition']
+ synset_id = row['synset_id']
+
+ cur.execute("SELECT * from uses where definition_id = ?", [id])
+ use_rows = cur.fetchall()
+ uses = []
+
+ for use in use_rows:
+ uses.append(use['quote'])
+
+ item = Definition(word, sub_id, "wn", type,definition, uses, synset_id, [])
items.append(item)
return items
@@ -413,7 +425,26 @@ def parse_foldoc(word, refer = None):
items.append(item)
return items
+def parse_urban(word):
+
+ word = word.replace(" ", "+")
+
+ try:
+ r = requests.get("http://urbanscraper.herokuapp.com/search/" + word)
+ json = r.json()
+ except:
+ #Should probably print an error, but then that would break printing other definitions, so let's not
+ return
+
+ items = []
+ id = 1
+ for json_item in json:
+ if json_item['definition'] != "" and json_item['definition'] is not None:
+ item = Definition(word, id, "urban", "urban", json_item['definition'], [json_item['example']], [], [])
+ items.append(item)
+ id += 1
+ return items
def main():
@@ -435,14 +466,21 @@ def main():
items = parse_xml(xml)
elif word_dict == "foldoc" or word_type == "tech":
items = parse_foldoc(word)
+ elif word_dict == "urban":
+ items = parse_urban(word)
else:
if word_dict is None or word_dict == "":
- word_dict = "db"
+ word_dict = "wn"
items = get_sql(word)
+
foldoc_items = parse_foldoc(word)
if foldoc_items is not None and len(foldoc_items) > 0:
items += foldoc_items
+ urban_items = parse_urban(word)
+ if urban_items is not None and len(urban_items) > 0:
+ items += urban_items
+
if items is None or len(items) == 0:
print "No definitions found for "+word
sys.exit( 1 )
@@ -459,7 +497,7 @@ def main():
else:
max_length = 460
- types = ["n", "v", "adj", "adv", "tech"]
+ types = ["n", "v", "adj", "adv", "tech", "urban"]
type_id = 0
all_types = word_type is ""
@@ -474,7 +512,6 @@ def main():
word_type = word_types[0]
all_types = False
-
for item in items:
#If no type is specified, we display one of each
if all_types:
@@ -487,6 +524,7 @@ def main():
continue
#Definitions should be ordered by type, so loop through all the types until we find a match
for cur_type in types[type_id:]:
+
if item.word_type == cur_type:
word_type = cur_type
type_id = cur_id
@@ -496,7 +534,9 @@ def main():
#If there were no matches, stick with the current type for now
if not found_type:
- word_type = types[type_id]
+
+ if type_id < len(types):
+ word_type = types[type_id]
if word_type == item.word_type:
#Keep track of how many we haven't printed
@@ -514,7 +554,8 @@ def main():
#Print usage examples if they exist
if len(item.uses) > 0:
- definition += "; \""+item.uses[0]['quote']+"\" "
+ definition = definition.rstrip(". ")
+ definition += "; \""+item.uses[0]+"\" "
if not all_types and line_length + len(definition) < (max_length * (page_num -1)):
line_length += len(definition) +1