Skip to content

Instantly share code, notes, and snippets.

@kleem
Last active April 28, 2020 22:27
Show Gist options
  • Save kleem/6516ac84c6c186d8bc13 to your computer and use it in GitHub Desktop.
Save kleem/6516ac84c6c186d8bc13 to your computer and use it in GitHub Desktop.
WordNet verb graph

This experiment is like the previous one, but focused on verbs rather than nouns. The following picture shows the "islands" of the core verb taxonomy graph (click here to see the one for nouns):

Core verb taxonomy graph

A cycle between synsets is removed (because identified as a human error in Richens 2008), then the graph is fed into a longest-path untangler to produce a tree.

from graph_tool.all import *
# g = load_graph('wnen30_verb_taxonomy.graphml.xml.gz')
# graph_draw(g,
# output_size=(2000, 2000),
# output='wnen30_verb_taxonomy.png',
# vertex_fill_color=(0.9,0.9,0.9,1),
# edge_pen_width=1.2
# )
#use the same layout for the two trees
# g = load_graph('wnen30_verb_tree_shortest.graphml.xml.gz')
# graph_draw(g,
# pos=layout,
# output_size=(2000, 2000),
# output='wnen30_verb_tree_shortest.png',
# vertex_fill_color=(0.9,0.9,0.9,1),
# edge_pen_width=1.2
# )
g = load_graph('wnen30_verb_tree_longest.graphml.xml.gz')
# find the root
for v in g.vertices():
if v.in_degree() == 0:
bogus_root = v
break
g.set_edge_filter(g.edge_properties['tree_link'])
layout = radial_tree_layout(g, bogus_root)
graph_draw(g,
pos=layout,
output_size=(2000, 2000),
output='wnen30_verb_tree_longest.png',
vertex_fill_color=(0.9,0.9,0.9,1),
edge_pen_width=1.2
)
from graph_tool.all import *
print 'Loading verb graph...'
g = load_graph('wnen30_verb_taxonomy.graphml.xml.gz')
synsetid = g.vertex_properties['synsetid']
definition = g.vertex_properties['definition']
print 'Checking if the graph is directed and acyclic...'
print is_DAG(g)
print 'Finding "restrain" and "inhibit"...'
restrain = find_vertex(g, synsetid, 202422663)[0]
inhibit = find_vertex(g, synsetid, 202423762)[0]
# print definition[restrain]
# print definition[inhibit]
print 'Removing hyponymy from "inhibit" to "restain"...'
for e in inhibit.out_edges():
if e.target() == restrain:
g.remove_edge(e)
break
print 'Checking again if the graph is directed and acyclic...'
print is_DAG(g)
print 'Saving the corrected graph...'
g.save('wnen30_verb_taxonomy_dag.graphml.xml.gz')
print 'Reading the list of sensekeys...'
sensekeys = [line.rstrip() for line in open('wnen30_core5000_verbs_sensekeys.txt')]
print 'Connecting to WordNet 3.0 MySQL database...'
import MySQLdb
import MySQLdb.cursors
def get_cursor():
return MySQLdb.connect(
host='opendata',
db='wordnet_en_3.0',
user='read',
passwd='read',
cursorclass=MySQLdb.cursors.DictCursor,
use_unicode=True,
charset='utf8'
).cursor()
print 'Loading the synset graph...'
from graph_tool.all import *
g = load_graph('wnen30_verb_tree_longest.graphml.xml.gz')
tree_link = g.edge_properties['tree_link']
pos = g.vertex_properties['pos']
print 'Indexing synsets...'
index = {}
synsetid = g.vertex_properties['synsetid']
for synset in g.vertices():
index[synsetid[synset]] = synset
print 'Adding a "is_synset" property to distinguish between senses and synsets...'
is_synset = g.new_vertex_property('bool')
g.vertex_properties['is_synset'] = is_synset
for synset in g.vertices():
is_synset[synset] = 1
print 'Adding new properties for sense nodes...'''
lemma = g.new_vertex_property('string')
sensenum = g.new_vertex_property('string')
senseid = g.new_vertex_property('int32_t')
sensekey = g.new_vertex_property('string')
is_core_sense = g.new_vertex_property('bool')
# add sense properties to the graph
g.vertex_properties['lemma'] = lemma
g.vertex_properties['sensenum'] = sensenum
g.vertex_properties['senseid'] = senseid
g.vertex_properties['sensekey'] = sensekey
g.vertex_properties['is_core_sense'] = is_core_sense
print 'Retrieving sense records...'
# for each sense found in the sensekey list with pos=v, create a vertex
c = get_cursor()
c.execute("SELECT * FROM wordsXsensesXsynsets WHERE pos='v' AND sensekey IN ("+','.join(map(lambda x: "'"+x+"'", sensekeys))+")")
senses = {}
print 'Creating core sense vertices...'
for i, row in enumerate(c.fetchall()):
print 'Core senses: %d\r' % (i+1),
v = g.add_vertex()
senses[row['senseid']] = v
is_synset[v] = 0
lemma[v] = row['lemma']
pos[v] = row['pos']
sensenum[v] = row['sensenum']
senseid[v] = row['senseid']
sensekey[v] = row['sensekey']
is_core_sense[v] = 1
e = g.add_edge(index[row['synsetid']],v)
tree_link[e] = 1 # links to senses have to be retained
print
print 'Selecting core vertices (senses and synsets)...'
retained = g.new_vertex_property('bool')
# init retained = 0 for all vertices
for v in g.vertices():
retained[v] = 0
# walk up the tangled tree
def walk(v):
retained[v] = 1
for parent in v.in_neighbours():
walk(parent)
# starting from each sense vertex
for sense in senses.values():
walk(sense)
g.set_vertex_filter(retained)
print '%d vertices selected.' % len(list(g.vertices()))
print 'Preparing synsets list...'
synsets = [v for v in g.vertices() if is_synset[v]]
print 'Retrieving non-core senses for synsets...'
c = get_cursor()
c.execute("SELECT * FROM wordsXsensesXsynsets WHERE pos='v' AND synsetid IN ("+','.join(map(lambda x: "'"+str(synsetid[x])+"'", synsets))+")")
i = 0
for row in c.fetchall():
if row['senseid'] not in senses:
# this is a new sense
v = g.add_vertex()
senses[row['senseid']] = v
is_synset[v] = 0
lemma[v] = row['lemma']
pos[v] = row['pos']
sensenum[v] = row['sensenum']
senseid[v] = row['senseid']
sensekey[v] = row['sensekey']
is_core_sense[v] = 0
e = g.add_edge(index[row['synsetid']],v)
tree_link[e] = 1 # links to senses have to be retained
# make sure that this vertex will be exported
retained[v] = 1
i += 1
print 'Non-core senses: %d\r' % i,
print
print 'Saving the graph...'
pruned = Graph(g, prune=True)
pruned.save('wnen30_core_verb_tree_longest_w_senses.graphml.xml.gz')
# read from WordNet 3.0 MySQL database
import MySQLdb
import MySQLdb.cursors
def get_cursor():
return MySQLdb.connect(
host='opendata',
db='wordnet_en_3.0',
user='read',
passwd='read',
cursorclass=MySQLdb.cursors.DictCursor,
use_unicode=True,
charset='utf8'
).cursor()
# generate a python-graph-tools Graph
from graph_tool.all import *
g = Graph()
# define properties for synset nodes
synsetid = g.new_vertex_property('int32_t')
pos = g.new_vertex_property('string')
definition = g.new_vertex_property('string')
# store properties into the graph
g.vertex_properties['synsetid'] = synsetid
g.vertex_properties['pos'] = pos
g.vertex_properties['definition'] = definition
# maintain a map from synsetids to vertexes
synset_map = {}
print 'Retrieving synsets...'
# for each synset with pos=v, create a vertex
c = get_cursor()
c.execute("""SELECT * FROM synsets WHERE pos='v'""")
for i, row in enumerate(c.fetchall()):
print 'Synsets added to the graph: %d\r' % (i+1),
v = g.add_vertex()
synset_map[row['synsetid']] = v
synsetid[v] = row['synsetid']
pos[v] = row['pos']
definition[v] = row['definition']
print
print 'Retrieving semlinks...'
# for each semlink, create an edge if both ends are found in the synset map (verb synsets)
c = get_cursor()
c.execute("""(SELECT synset1id AS parent, synset2id AS child FROM semlinks WHERE linkid IN (2,4))
UNION DISTINCT
(SELECT synset2id AS parent, synset1id AS child FROM semlinks WHERE linkid IN (1,3))""")
i = 0
for row in c.fetchall():
print 'Semlinks added to the graph: %d\r' % (i+1),
try:
e = g.add_edge(synset_map[row['parent']], synset_map[row['child']])
i += 1
except KeyError:
print
print 'Link between %d and %d skipped' % (row['parent'], row['child'])
print
print 'Saving the graph...'
g.save('wnen30_verb_taxonomy.graphml.xml.gz')
# LOAD
from graph_tool.all import *
print 'Loading graph...'
g = load_graph('wnen30_verb_taxonomy_dag.graphml.xml.gz')
# read properties for synset nodes
synsetid = g.vertex_properties['synsetid']
pos = g.vertex_properties['pos']
definition = g.vertex_properties['definition']
# find all the roots
roots = []
for v in g.vertices():
if v.in_degree() == 0:
roots.append(v)
# add a bogus root
bogus_root = g.add_vertex()
synsetid[bogus_root] = -1
pos[bogus_root] = 'v'
definition[bogus_root] = ''
for root in roots:
g.add_edge(bogus_root, root)
# COMPUTE
print 'Computing topological sort...'
topological_order = topological_sort(g)
# print topological_order
print 'Computing longest distances from the bogus root...'
print 'Assigning initial distances...'
longest_dist = g.new_vertex_property('int32_t')
for v in g.vertices():
longest_dist[v] = -2147483648 # minimum int32_t number as -Inf ???
longest_dist[bogus_root] = 0
from itertools import imap
# unweighted topological sort (all edges have weight=1)
# adapted from http://www.geeksforgeeks.org/find-longest-path-directed-acyclic-graph/
for u in imap(g.vertex, reversed(topological_order)):
# print 'Considering node %d (current distance %d)' % (u, longest_dist[u])
for v in u.out_neighbours():
# print ' Comparing with node %d (current distance %d)' % (v, longest_dist[v])
if longest_dist[v] < longest_dist[u]+1:
longest_dist[v] = longest_dist[u]+1
# print ' Updated distance to %d' % (longest_dist[v])
print 'Creating the longest path tree...'
# all edges have to lead to a node with depth equal to longest_dist, otherwise they are part of a not-maximal path
# in the case of a tie, an already seen node must not be taken twice
from itertools import izip
retain_longest = g.new_edge_property('bool')
already_visited = set()
def walk(node, depth):
for edge, child in izip(node.out_edges(), node.out_neighbours()):
if longest_dist[child] == depth and child not in already_visited:
retain_longest[edge] = 1
already_visited.add(child)
walk(child, depth+1)
else:
retain_longest[edge] = 0
tree = walk(bogus_root, 1)
# EXPORT
print 'Saving the graph (retained links are marked with "tree_link" = 1)...'
g.edge_properties['tree_link'] = retain_longest
g.save('wnen30_verb_tree_longest.graphml.xml.gz')
# LOAD
from graph_tool.all import *
print 'Loading graph...'
g = load_graph('wnen30_verb_taxonomy_dag.graphml.xml.gz')
# read properties for synset nodes
synsetid = g.vertex_properties['synsetid']
pos = g.vertex_properties['pos']
definition = g.vertex_properties['definition']
# find all the roots
roots = []
for v in g.vertices():
if v.in_degree() == 0:
roots.append(v)
# compute the longest path tree for each root
retain_longest = g.new_edge_property('bool')
longest_dist = g.new_vertex_property('int32_t')
for r in roots:
g.set_vertex_filter(None)
in_component = label_out_component(g, r)
g.set_vertex_filter(in_component)
print 'Computing topological sort...'
topological_order = topological_sort(g)
# print topological_order
print 'Computing longest distances from root (entity synset is vertex 0)...'
print 'Assigning initial distances...'
for v in g.vertices():
longest_dist[v] = -2147483648 # minimum int32_t number as -Inf ???
longest_dist[r] = 0 # root is initialized to 0
from itertools import imap
# unweighted topological sort (all edges have weight=1)
# adapted from http://www.geeksforgeeks.org/find-longest-path-directed-acyclic-graph/
for u in imap(g.vertex, reversed(topological_order)):
# print 'Considering node %d (current distance %d)' % (u, longest_dist[u])
for v in u.out_neighbours():
# print ' Comparing with node %d (current distance %d)' % (v, longest_dist[v])
if longest_dist[v] < longest_dist[u]+1:
longest_dist[v] = longest_dist[u]+1
# print ' Updated distance to %d' % (longest_dist[v])
print 'Creating the longest path tree...'
# all edges have to lead to a node with depth equal to longest_dist, otherwise they are part of a not-maximal path
# in the case of a tie, an already seen node must not be taken twice
from itertools import izip
already_visited = set()
def walk(node, depth):
for edge, child in izip(node.out_edges(), node.out_neighbours()):
if longest_dist[child] == depth and child not in already_visited:
retain_longest[edge] = 1
already_visited.add(child)
walk(child, depth+1)
else:
retain_longest[edge] = 0
tree = walk(g.vertex(0), 1)
# EXPORT
g.set_vertex_filter(None)
print 'Saving the graph (retained links are marked with "tree_link" = 1)...'
g.edge_properties['tree_link'] = retain_longest
g.save('wnen30_verb_tree_longest.graphml.xml.gz')
have%2:40:00::
say%2:32:00::
go%2:38:00::
go%2:30:00::
get%2:40:00::
make%2:36:01::
make%2:40:01::
make%2:36:07::
see%2:39:00::
see%2:31:01::
see%2:38:00::
know%2:31:03::
know%2:31:02::
know%2:31:00::
take%2:38:10::
take%2:31:01::
inflate%2:30:00::
think%2:31:01::
think%2:31:00::
think%2:31:02::
give%2:40:01::
give%2:36:00::
give%2:40:06::
give%2:34:00::
give%2:38:13::
give%2:35:00::
look%2:39:01::
look%2:39:02::
use%2:41:04::
applaud%2:32:01::
find%2:40:15::
find%2:36:00::
want%2:37:00::
need%2:34:00::
tell%2:32:01::
arrange%2:31:00::
work%2:41:00::
work_out%2:29:01::
shape%2:36:00::
shave%2:29:00::
knead%2:35:00::
solve%2:31:00::
become%2:42:01::
mean%2:32:03::
leave%2:30:03::
leave%2:38:00::
leave%2:40:01::
seem%2:39:01::
feel%2:37:00::
ask%2:32:00::
ask%2:32:05::
show%2:32:01::
show%2:39:04::
show%2:39:02::
prove%2:31:00::
testify%2:32:02::
try%2:34:00::
try%2:41:00::
try%2:41:06::
call%2:32:02::
call%2:32:01::
call%2:32:05::
call%2:32:09::
call%2:32:10::
keep%2:32:00::
keep%2:41:05::
keep%2:30:10::
keep%2:40:00::
provide%2:40:00::
hold%2:33:05::
hold%2:41:00::
hold%2:42:13::
hold%2:35:01::
follow%2:41:00::
follow%2:41:01::
follow%2:38:00::
turn%2:38:04::
turn%2:35:11::
turn%2:38:00::
bring%2:35:02::
bring%2:40:00::
begin%2:30:01::
like%2:37:04::
write%2:36:03::
write%2:36:04::
write%2:32:00::
write%2:36:02::
start%2:38:02::
run%2:38:00::
fast%2:34:00::
run%2:38:04::
run%2:38:01::
run%2:33:06::
run%2:35:04::
set%2:38:00::
set%2:35:09::
set%2:30:00::
help%2:41:00::
rescue%2:41:00::
play%2:36:10::
play%2:33:08::
play%2:33:00::
play%2:36:12::
play%2:41:03::
move%2:37:01::
move%2:29:06::
move%2:38:02::
move%2:38:00::
pay%2:40:00::
hear%2:39:00::
meet%2:41:03::
meet%2:41:00::
include%2:42:00::
include%2:41:03::
allow%2:32:00::
lead%2:38:00::
lead%2:41:00::
stand%2:35:00::
stand%2:31:00::
happen%2:30:00::
carry%2:35:02::
talk%2:32:03::
sit%2:35:00::
appear%2:30:00::
let%2:40:00::
produce%2:36:05::
require%2:32:00::
suggest%2:32:00::
suggest%2:32:01::
consider%2:32:02::
read%2:31:00::
change%2:30:05::
change%2:30:02::
offer%2:40:01::
offer%2:41:00::
lose%2:33:00::
lose%2:35:00::
add%2:32:00::
expect%2:31:00::
remember%2:31:09::
remain%2:42:01::
fall%2:38:03::
fall%2:30:06::
open%2:35:00::
buy%2:40:00::
stop%2:42:00::
stop%2:38:00::
send%2:32:03::
send%2:32:00::
decide%2:31:00::
decide%2:31:06::
win%2:33:00::
understand%2:31:04::
understand%2:31:00::
develop%2:42:00::
develop%2:31:00::
develop%2:30:09::
develop%2:36:01::
return%2:40:00::
return%2:38:12::
return%2:38:00::
spend%2:40:00::
describe%2:32:00::
agree%2:32:01::
agree%2:42:00::
increase%2:30:00::
learn%2:32:00::
learn%2:31:03::
reach%2:42:00::
reach%2:41:00::
lie%2:38:00::
lie%2:32:00::
walk%2:38:00::
die%2:39:00::
draw%2:40:01::
draw%2:35:06::
draw%2:33:00::
draw%2:35:03::
draw%2:36:00::
create%2:36:02::
sell%2:41:00::
sell%2:40:00::
pass%2:38:00::
pass%2:41:02::
pass%2:38:03::
pass%2:38:01::
pass%2:41:08::
pass%2:42:04::
accept%2:31:03::
watch%2:39:02::
break%2:35:00::
break%2:32:04::
die%2:30:05::
break%2:30:10::
break%2:41:11::
break%2:32:00::
support%2:31:00::
explain%2:32:00::
stay%2:38:00::
wait%2:42:00::
cover%2:35:00::
cover%2:32:01::
raise%2:41:04::
raise%2:38:00::
raise%2:41:00::
raise%2:40:00::
raise%2:36:02::
claim%2:32:00::
form%2:30:01::
form%2:41:00::
cut%2:41:10::
abridge%2:30:00::
cut%2:30:06::
grow%2:30:04::
contain%2:42:00::
bear%2:35:00::
establish%2:35:00::
face%2:33:00::
choose%2:31:01::
drive%2:38:00::
cope%2:41:00::
place%2:31:01::
put%2:35:00::
seek%2:35:00::
fail%2:41:00::
serve%2:34:00::
serve%2:41:01::
kill%2:35:00::
plan%2:31:00::
plan%2:36:01::
eat%2:34:00::
close%2:41:01::
close%2:35:00::
represent%2:41:00::
represent%2:42:02::
love%2:37:02::
love%2:37:01::
rise%2:38:08::
rise%2:38:00::
rise%2:29:08::
rise%2:38:05::
rise%2:30:00::
manage%2:41:09::
manage%2:41:01::
discuss%2:32:00::
captivate%2:37:00::
catch%2:35:00::
catch%2:35:03::
pick%2:31:00::
pick%2:35:01::
blame%2:32:01::
suppose%2:31:01::
wear%2:29:00::
introduce%2:38:00::
introduce%2:30:00::
introduce%2:32:00::
enter%2:38:00::
enter%2:41:06::
ensure%2:32:00::
pull%2:35:10::
refer%2:32:01::
thank%2:32:00::
present%2:40:01::
control%2:41:00::
control%2:35:00::
affect%2:32:00::
affect%2:30:00::
identify%2:32:00::
relate%2:31:00::
force%2:41:00::
force%2:38:00::
compare%2:31:00::
suffer%2:39:00::
obtain%2:40:00::
forget%2:31:00::
publish%2:32:00::
visit%2:38:00::
listen%2:39:00::
finish%2:30:02::
fight%2:33:00::
train%2:32:00::
save%2:41:05::
save%2:40:01::
improve%2:30:01::
avoid%2:32:00::
wonder%2:32:01::
share%2:40:02::
smile%2:29:00::
treat%2:41:00::
treat%2:29:00::
throw%2:31:00::
throw%2:35:00::
fill%2:30:01::
assume%2:31:00::
mention%2:32:00::
admit%2:32:00::
admit%2:41:01::
replace%2:30:00::
reflect%2:31:00::
reflect%2:43:00::
encourage%2:32:00::
miss%2:37:00::
miss%2:42:01::
miss%2:38:00::
miss%2:42:00::
drop%2:38:01::
drop%2:35:12::
drop%2:29:01::
fly%2:38:00::
reveal%2:39:00::
discover%2:40:00::
record%2:32:01::
refuse%2:32:00::
refuse%2:40:00::
refuse%2:40:01::
prevent%2:41:01::
answer%2:32:00::
depend%2:42:00::
hit%2:35:01::
hit%2:35:00::
realise%2:31:01::
notice%2:39:00::
extend%2:30:01::
check%2:31:01::
check%2:31:12::
laugh%2:29:00::
recognise%2:31:00::
recognise%2:41:00::
fit%2:42:03::
fit%2:40:00::
push%2:35:06::
push%2:32:00::
sign%2:32:02::
define%2:32:00::
shake%2:38:00::
shake%2:38:02::
study%2:31:01::
mind%2:32:00::
drink%2:34:00::
gain%2:40:02::
hang%2:35:00::
protect%2:33:00::
adopt%2:40:00::
adopt%2:30:00::
clear%2:32:00::
perform%2:36:01::
clear%2:30:10::
imagine%2:36:00::
beat%2:35:03::
beat%2:42:00::
beat%2:33:00::
beat%2:35:00::
beat%2:38:00::
strike%2:41:00::
strike%2:35:08::
demand%2:32:00::
employ%2:41:00::
shoot%2:33:00::
shoot%2:30:00::
release%2:41:00::
ring%2:39:00::
link%2:35:00::
collect%2:40:03::
lay%2:35:00::
press%2:32:00::
press%2:35:00::
press%2:35:02::
approach%2:38:00::
settle%2:32:01::
settle%2:30:03::
settle%2:38:07::
settle%2:32:02::
limit%2:30:01::
deny%2:40:01::
deny%2:32:00::
worry%2:37:00::
cross%2:42:00::
charge%2:32:03::
charge%2:40:01::
charge%2:30:00::
charge%2:40:03::
concentrate%2:31:00::
ignore%2:32:00::
ignore%2:31:03::
lift%2:32:00::
lift%2:40:01::
stick%2:35:03::
stick%2:35:00::
arrange%2:35:00::
touch%2:35:00::
prefer%2:41:00::
repeat%2:36:00::
insist%2:32:00::
measure%2:30:00::
measure%2:31:01::
warn%2:32:00::
attack%2:33:02::
bind%2:35:00::
bind%2:41:01::
threaten%2:32:00::
cry%2:29:00::
attract%2:37:00::
appoint%2:41:01::
demonstrate%2:41:00::
market%2:30:00::
care%2:37:02::
sing%2:36:00::
deliver%2:41:01::
deliver%2:41:00::
deliver%2:35:00::
invite%2:41:00::
retain%2:31:00::
spread%2:35:13::
spread%2:32:00::
last%2:42:00::
nod%2:32:00::
reject%2:31:02::
vote%2:41:13::
divide%2:41:00::
hide%2:39:01::
hide%2:39:00::
match%2:30:00::
transfer%2:35:00::
recommend%2:32:00::
combine%2:30:00::
dress%2:29:01::
belong%2:40:00::
undertake%2:41:01::
disappear%2:30:00::
secure%2:35:01::
shout%2:32:12::
shout%2:32:00::
generate%2:36:00::
display%2:39:00::
step%2:41:00::
step%2:38:01::
fear%2:37:00::
rely%2:31:11::
escape%2:38:00::
organise%2:30:00::
organise%2:31:00::
direct%2:32:01::
direct%2:36:00::
climb%2:38:00::
afford%2:42:00::
approve%2:32:00::
fix%2:30:01::
remind%2:32:00::
roll%2:38:09::
roll%2:38:00::
illustrate%2:32:00::
ride%2:38:00::
ride%2:32:00::
burn%2:39:00::
sting%2:35:01::
burn%2:43:02::
jump%2:31:00::
jump%2:38:12::
jump%2:38:00::
wash%2:35:00::
wash%2:29:00::
blow%2:40:02::
persuade%2:32:00::
matter%2:42:00::
recover%2:29:00::
hurt%2:37:00::
hurt%2:39:00::
lean%2:38:00::
slip%2:38:00::
accompany%2:38:00::
attach%2:40:00::
count%2:32:00::
appeal%2:41:04::
hate%2:37:00::
rest%2:32:00::
switch%2:40:00::
surround%2:42:00::
question%2:32:03::
withdraw%2:38:00::
paint%2:36:01::
paint%2:35:00::
separate%2:41:00::
separate%2:30:04::
separate%2:38:00::
owe%2:40:01::
occupy%2:42:01::
stretch%2:29:02::
expand%2:38:00::
expand%2:30:01::
expand%2:32:10::
back%2:41:01::
light%2:43:00::
light%2:30:00::
challenge%2:32:01::
list%2:41:00::
suit%2:42:02::
elect%2:31:00::
elect%2:41:00::
tie%2:30:00::
exclude%2:31:01::
exclude%2:35:00::
review%2:31:01::
appreciate%2:37:00::
abandon%2:31:00::
blame%2:32:00::
quote%2:32:00::
rule%2:41:00::
dominate%2:42:01::
glance%2:39:00::
interpret%2:32:01::
land%2:38:00::
mix%2:35:02::
register%2:41:01::
complain%2:32:00::
dismiss%2:41:00::
shift%2:38:01::
convince%2:32:00::
oppose%2:32:01::
arrest%2:35:00::
bother%2:37:00::
stress%2:32:00::
justify%2:32:02::
construct%2:36:01::
wake%2:29:01::
print%2:36:00::
guess%2:32:00::
cast%2:35:00::
cast%2:36:01::
submit%2:31:00::
relax%2:29:00::
pour%2:38:00::
pour%2:38:03::
urge%2:32:01::
locate%2:42:00::
convert%2:30:01::
please%2:37:00::
cook%2:41:00::
kiss%2:35:00::
fund%2:40:00::
lock%2:35:00::
pack%2:35:00::
dance%2:36:00::
retire%2:29:00::
retire%2:41:01::
kick%2:35:00::
smoke%2:34:00::
swing%2:38:00::
fire%2:33:00::
compete%2:33:00::
decline%2:30:01::
bend%2:38:03::
bend%2:35:08::
resist%2:33:00::
resist%2:41:00::
qualify%2:42:00::
qualify%2:30:01::
breathe%2:29:00::
borrow%2:40:00::
race%2:38:00::
expose%2:32:00::
resign%2:41:05::
store%2:40:00::
differ%2:32:00::
differ%2:42:00::
drag%2:38:00::
drag%2:35:00::
sweep%2:35:00::
whisper%2:32:00::
deserve%2:42:00::
split%2:30:01::
slide%2:38:00::
behave%2:29:00::
enhance%2:30:01::
waste%2:34:00::
advance%2:38:00::
bury%2:35:00::
lend%2:40:00::
manufacture%2:36:01::
impress%2:37:00::
lower%2:29:00::
snap%2:30:00::
bite%2:35:00::
capture%2:40:00::
sustain%2:42:01::
participate%2:41:00::
distribute%2:40:01::
ban%2:41:01::
dare%2:41:01::
exceed%2:33:00::
perceive%2:39:00::
snap%2:35:00::
snap%2:35:02::
snap%2:32:00::
dig%2:35:02::
dig%2:35:00::
transform%2:30:03::
upset%2:37:00::
upset%2:38:00::
free%2:41:07::
shrug%2:29:00::
delay%2:42:00::
delay%2:30:00::
tap%2:35:00::
tap%2:34:00::
exploit%2:34:00::
request%2:32:01::
confine%2:41:00::
scream%2:32:08::
sail%2:38:00::
adjust%2:30:01::
block%2:41:00::
absorb%2:43:00::
reinforce%2:32:00::
injure%2:29:00::
swim%2:38:00::
swim%2:38:01::
doubt%2:31:00::
frighten%2:37:00::
stir%2:38:01::
seize%2:35:00::
park%2:38:00::
collapse%2:38:02::
pray%2:32:01::
pray%2:32:00::
gaze%2:39:00::
burst%2:30:01::
relieve%2:40:01::
risk%2:41:01::
smell%2:39:01::
smell%2:39:00::
grin%2:29:00::
wave%2:32:00::
sigh%2:29:00::
double%2:30:00::
instal%2:35:00::
wander%2:32:00::
disappoint%2:37:00::
wipe%2:35:00::
swipe%2:35:00::
inspire%2:36:00::
balance%2:42:00::
reserve%2:32:00::
wind%2:35:00::
crash%2:35:01::
crash%2:35:07::
crash%2:30:10::
crash%2:38:02::
confront%2:42:00::
precede%2:42:00::
wrap%2:35:00::
bet%2:32:00::
swear%2:32:00::
swear%2:32:01::
correspond%2:32:00::
weigh%2:42:01::
weigh%2:42:00::
shine%2:39:01::
shine%2:35:00::
knit%2:36:00::
eliminate%2:30:01::
freeze%2:29:00::
freeze%2:30:00::
greet%2:32:01::
cancel%2:41:03::
load%2:35:10::
hesitate%2:42:00::
reverse%2:30:01::
admire%2:37:00::
rub%2:35:00::
rub%2:39:00::
swallow%2:31:00::
swallow%2:34:00::
interrupt%2:30:04::
brush%2:35:01::
respect%2:31:00::
mutter%2:32:01::
overlook%2:39:01::
twist%2:38:01::
twist%2:35:01::
undermine%2:41:00::
march%2:38:00::
object%2:32:00::
breed%2:35:01::
squeeze%2:40:03::
squeeze%2:35:02::
squeeze%2:35:04::
squeeze%2:35:05::
chase%2:38:00::
copy%2:36:00::
copy%2:36:01::
recruit%2:40:00::
debate%2:32:00::
pop%2:30:03::
provoke%2:37:01::
provoke%2:37:00::
beg%2:40:00::
fade%2:30:01::
import%2:40:00::
cater%2:34:01::
export%2:40:00::
execute%2:41:00::
excuse%2:32:00::
fold%2:35:00::
tip%2:38:04::
tip%2:38:00::
persist%2:30:01::
update%2:32:00::
time%2:30:00::
concede%2:33:00::
insert%2:35:01::
exhibit%2:42:00::
regret%2:37:00::
entertain%2:41:00::
strip%2:29:01::
plead%2:32:01::
abolish%2:41:00::
resemble%2:42:00::
inherit%2:40:00::
conceive%2:29:00::
guard%2:33:00::
drain%2:30:01::
spin%2:32:00::
spin%2:38:01::
spin%2:36:00::
speed%2:38:01::
scatter%2:35:00::
slam%2:35:01::
creep%2:38:00::
creep%2:38:07::
reproduce%2:36:00::
age%2:30:01::
dump%2:40:00::
dump%2:40:02::
smash%2:30:00::
classify%2:41:00::
explode%2:31:00::
explode%2:30:04::
post%2:32:03::
flood%2:35:00::
taste%2:39:00::
decrease%2:30:01::
seal%2:35:03::
reward%2:40:00::
thrust%2:38:01::
widen%2:30:03::
model%2:36:04::
stuff%2:30:02::
stuff%2:34:00::
flash%2:39:00::
shed%2:35:00::
coincide%2:30:00::
dissolve%2:30:07::
tempt%2:32:04::
spoil%2:30:02::
spoil%2:30:00::
spoil%2:41:01::
formulate%2:32:00::
long%2:37:02::
drown%2:30:00::
dedicate%2:32:01::
devote%2:32:00::
clarify%2:32:00::
strain%2:29:00::
deprive%2:40:00::
fling%2:35:00::
fling%2:40:01::
bow%2:38:00::
compensate%2:40:00::
substitute%2:40:00::
embark%2:41:00::
revive%2:29:01::
trip%2:38:00::
forbid%2:32:00::
suppress%2:30:00::
betray%2:32:03::
punish%2:41:00::
obey%2:41:00::
tremble%2:38:00::
spill%2:38:00::
activate%2:30:00::
calm%2:37:00::
stamp%2:38:00::
stamp%2:31:00::
shock%2:37:01::
shock%2:37:02::
stroke%2:35:00::
carve%2:35:00::
convict%2:32:00::
drug%2:29:00::
depart%2:38:02::
underline%2:32:03::
penetrate%2:38:06::
grind%2:30:00::
bless%2:32:00::
jest%2:29:00::
toss%2:35:04::
dive%2:38:02::
heal%2:29:01::
host%2:34:00::
dictate%2:31:00::
bar%2:41:00::
chop%2:35:01::
bomb%2:33:00::
dislike%2:37:00::
curl%2:35:01::
pump%2:38:00::
terrify%2:37:00::
dip%2:38:02::
multiply%2:31:00::
proclaim%2:32:00::
screen%2:31:00::
screen%2:41:00::
reform%2:30:08::
comfort%2:37:01::
plot%2:36:00::
plot%2:31:00::
scratch%2:35:00::
weave%2:36:00::
endure%2:42:04::
stride%2:38:00::
snatch%2:35:01::
shiver%2:29:00::
boil%2:30:00::
postpone%2:42:00::
gasp%2:29:00::
divorce%2:41:00::
desert%2:41:00::
quit%2:33:05::
relinquish%2:40:00::
discourage%2:32:01::
lodge%2:42:02::
glare%2:29:00::
stumble%2:31:00::
harm%2:29:00::
tolerate%2:41:01::
document%2:32:00::
scan%2:39:00::
amuse%2:32:00::
haul%2:35:00::
fan%2:38:00::
rock%2:38:06::
flush%2:29:00::
flush%2:30:03::
flourish%2:40:00::
foster%2:32:00::
screw%2:35:01::
screw%2:33:00::
apologise%2:32:00::
retreat%2:38:02::
stain%2:30:00::
frame%2:41:00::
frame%2:42:00::
shatter%2:30:00::
swell%2:30:00::
recycle%2:34:00::
prosecute%2:41:00::
sniff%2:39:00::
experiment%2:41:01::
film%2:36:00::
offset%2:42:01::
stab%2:35:02::
spare%2:41:01::
spare%2:40:00::
soak%2:40:03::
soak%2:35:01::
soak%2:40:00::
spit%2:29:00::
rape%2:41:00::
pledge%2:32:00::
shrink%2:30:11::
dispute%2:32:01::
restrain%2:35:01::
straighten%2:35:00::
kneel%2:35:00::
polish%2:30:01::
tease%2:37:01::
tease%2:32:09::
roar%2:32:05::
preach%2:32:02::
offend%2:37:01::
master%2:31:01::
total%2:30:00::
perforate%2:35:03::
bounce%2:38:02::
square%2:31:00::
obscure%2:39:00::
distort%2:32:00::
indulge%2:34:12::
rob%2:40:00::
exaggerate%2:32:00::
authorise%2:41:00::
nominate%2:32:00::
donate%2:40:00::
soar%2:38:00::
demolish%2:36:00::
disguise%2:39:00::
jail%2:41:00::
jerk%2:29:00::
sip%2:34:00::
overwhelm%2:33:00::
damn%2:32:00::
slap%2:35:00::
bake%2:36:00::
glow%2:39:00::
chew%2:34:00::
resent%2:37:00::
minimise%2:32:01::
delete%2:32:00::
level%2:36:00::
cooperate%2:41:00::
compromise%2:32:01::
lick%2:35:00::
rear%2:38:00::
congratulate%2:32:01::
bleed%2:29:00::
bargain%2:40:00::
insure%2:40:00::
consolidate%2:30:00::
graduate%2:40:00::
tumble%2:38:00::
inject%2:34:01::
row%2:38:00::
haunt%2:38:00::
deteriorate%2:30:00::
scramble%2:35:00::
leak%2:30:04::
cough%2:29:00::
linger%2:42:00::
trouble%2:37:00::
blast%2:39:00::
deter%2:32:00::
scrape%2:35:00::
choke%2:29:04::
choke%2:29:03::
hook%2:35:00::
fool%2:32:00::
plug%2:35:01::
dine%2:34:01::
slump%2:38:01::
board%2:38:00::
license%2:41:00::
whip%2:35:02::
crop%2:35:02::
crop%2:35:10::
pile%2:35:00::
utter%2:32:02::
ascertain%2:31:01::
crouch%2:35:00::
storm%2:43:01::
groan%2:32:00::
denounce%2:32:00::
infect%2:29:01::
revise%2:32:00::
fascinate%2:42:00::
cultivate%2:30:01::
pat%2:35:00::
profit%2:40:00::
tick%2:39:00::
stroll%2:38:00::
articulate%2:32:01::
intensify%2:30:02::
bump%2:35:01::
install%2:41:00::
tune%2:30:01::
tread%2:38:00::
poison%2:29:00::
hover%2:38:01::
forge%2:36:01::
handicap%2:33:00::
spray%2:35:00::
despise%2:37:00::
mislead%2:32:00::
speculate%2:40:00::
enlarge%2:30:01::
hike%2:38:00::
knock%2:35:01::
behead%2:35:00::
eavesdrop%2:39:00::
skate%2:38:00::
dilute%2:30:00::
launch%2:35:00::
yawn%2:29:00::
brag%2:32:00::
punch%2:35:00::
punch%2:35:01::
amputate%2:35:00::
defend%2:41:00::
bark%2:32:00::
nap%2:29:00::
photocopy%2:36:00::
hiccup%2:29:00::
debut%2:36:00::
hypnotize%2:29:00::
sightsee%2:38:00::
glide%2:38:00::
faint%2:29:00::
sow%2:35:00::
snuggle%2:35:00::
wrestle%2:35:00::
redeem%2:40:03::
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment