Create a gist now

Instantly share code, notes, and snippets.

@hugovk /README.md
Last active Aug 29, 2015

What would you like to do?
Cutthroat verb-nouns

Cutthroat verb-nouns

David-Antoine Williams writes:

What is the difference between a catch-all and a catch-phrase? Both are compounds formed as Verb+Noun, but in catch-all, the noun is the direct object of the verb, whereas in catch-phrase it is the subject. That is, a catch-all is something that catches all things, whereas a catch-phrase is not something that catches phrases – it is a phrase that catches something. Get it?

Recently there has been some discussion of catch-all type compounds, which Brianne Hughes has named “cutthroat compounds,” after one of the more suggestive of these. Apparently they’re rare, because they violate a general tendency for compounds in English to put the ‘head’ (e.g. phrase) on the right (‘right-headedness’). Compare F. ouvre-bouteille to E. bottle-opener (not open-bottle), which follows the most common English productive pattern, Object-Verb+er. If catch-all had followed the normal pattern, we’d be talking about an all-catcher, as we talk about dog-catchers and wind-catchers.

D-AW went on to write a script that unlurked some cutthroats, searching for verbs with left-headed combinations recorded in the entry. I decided to write a script to try another approach -- look for hyphenated nouns where the first part can a verb and the second a noun.

A WordNet list of 117,953 nouns was reduced to just 3,937 hyphenated words, then further reduced to 916 verb-nouns (i.e. a single hyphen, no spaces) via the Wordnik API, then manually whittled down.

Of these potential cutthroats, the following aren't yet on Brianne's list:

  1. be-all
  2. cease-fire
  3. counter-revolution
  4. counter-sabotage
  5. cross-classification
  6. cross-division
  7. cross-eye
  8. cross-purpose
  9. cross-question
  10. cross-stitch
  11. dangle-berry
  12. dash-pot
  13. do-good
  14. drop-leaf
  15. end-all
  16. fuss-budget
  17. knock-knee
  18. make-work
  19. shut-eye
  20. squint-eye
  21. sweep-second

I've been generous with some of these, some might originally be adjective-noun but can also be seen as verb-noun: it can be argued counter-revolutions are things that counters revolutions, cross-questions are things (also questions) that cross other questions (there are more counter- and cross- words like this). Some might just be wrong, but here they are.

Here's the ones it found that are already on Brianne's list:

  1. break-axe
  2. cure-all
  3. do-nothing
  4. drop-seed
  5. know-all
  6. make-peace
  7. rest-harrow
  8. save-all
  9. shove-ha'penny, shove-halfpenny
  10. spend-all

And in case I missed any, the full list of 916 verb-nouns is here.

#!/usr/bin/env python
# encoding: utf-8
"""
Find potential cutthroat compounds from a wordlist.
Specifically: find words with a single hyphen and no spaces,
and check (via Wordnik) the first part can be a verb and the second a noun.
For example: be-all, cease-fire, cure-all, do-good, fuss-budget, make-work.
"""
from __future__ import print_function
import argparse
import sys
import yaml
from wordnik import swagger, WordApi
def load_yaml(filename):
"""
File should contain:
wordnik_api_key: TODO_ENTER_YOURS
"""
f = open(filename)
data = yaml.safe_load(f)
f.close()
if not data.viewkeys() >= {'wordnik_api_key'}:
sys.exit("Wordnik credentials missing from YAML: " + filename)
return data
def read_file(filename):
""" Open a file and return a list of lines"""
with open(filename, 'r') as f:
lines = f.readlines()
return lines
def clean_lines(lines):
"""Keep those with no spaces and only one hyphen"""
kept = []
for line in lines:
if " " not in line and line.count("-") == 1:
kept.append(line.strip())
return kept
def is_pos(word, part_of_speech):
"""Is this word that part-of-speech?"""
result = word_api.getDefinitions(word, partOfSpeech=part_of_speech,
limit=1)
if result:
return True
else:
return False
def verb_nouns(lines):
"""Return lines where the first part can be a verb and the second a noun"""
print("Potential cutthroats:")
potentials = []
for line in lines:
parts = line.split("-")
if (parts[0] and parts[1] and
is_pos(parts[0], "verb") and
is_pos(parts[1], "noun")):
print(line)
potentials.append(line)
return potentials
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Find potential cutthroat compounds from a wordlist.",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument(
'-y', '--yaml', default='wordnik.yaml',
help="YAML file location containing Wordnik API key")
parser.add_argument(
'-i', '--infile', default="index.noun-hyphenated",
help="Input word file, one word per line")
args = parser.parse_args()
lines = read_file(args.infile)
print(len(lines))
lines = clean_lines(lines)
print(len(lines))
credentials = load_yaml(args.yaml)
wordnik_client = swagger.ApiClient(credentials['wordnik_api_key'],
'http://api.wordnik.com/v4')
word_api = WordApi.WordApi(wordnik_client)
lines = verb_nouns(lines)
print(len(lines))
# End of file
add-in
add-on
addle-head
air-conditioner
air-intake
air-sleeve
amen-ra
ape-man
arm-twisting
armor-bearer
arms-runner
ash-bin
ash-key
ash-pan
assay-mark
baa-lamb
baby-sitter
baby-walker
back-blast
back-formation
back-number
ball-breaker
ball-buster
balls-up
banning-order
bark-louse
battle-ax
battle-axe
baulk-line
beam-ends
bed-ground
bed-wetting
beggar-ticks
bell-bottoms
bent-grass
beta-adrenoceptor
beta-carotene
beta-interferon
beta-lactamase
beta-lipoprotein
beta-naphthol
bird-scarer
bitter-bark
blackberry-lily
blockade-runner
blood-twig
blue-belly
blue-blindness
body-build
bolt-hole
boo-boo
booze-up
bore-hole
bottle-grass
bottle-tree
bottom-dweller
bottom-feeder
bow-tie
bow-wow
brain-fag
brain-stem
brain-teaser
brain-worker
brand-newness
bread-bin
bread-stick
break-axe
break-in
bride-gift
bridged-t
broker-dealer
broom-weed
brush-off
bug-hunter
bull-snake
bun-fight
bust-up
butt-weld
butt-welding
butter-flower
butter-print
button-quail
call-back
call-board
call-in
call-out
card-house
carry-forward
carry-over
cease-fire
chain-smoker
chance-medley
change-up
cheap-jack
check-in
chin-up
chin-wag
chin-wagging
chit-chat
church-state
click-clack
climb-down
clip-clop
clip-on
clock-watching
club-head
club-moss
cockle-bur
cockle-burr
comb-out
comb-plate
come-on
concert-goer
counter-revolutionist
counter-sabotage
court-martial
cover-up
cox-1
cox-2
crack-up
crap-shooter
crinkle-root
crop-dusting
cross-classification
cross-division
cross-dresser
cross-examination
cross-examiner
cross-eye
cross-fertilisation
cross-fertilization
cross-index
cross-link
cross-linkage
cross-pollination
cross-purpose
cross-question
cross-questioner
cross-reference
cross-stitch
crow-bait
crown-beard
cuckoo-bumblebee
cure-all
custom-built
custom-made
cut-in
cut-up
cyber-terrorism
cyber-terrorist
dancing-master
dangle-berry
dapple-gray
dapple-grey
dappled-gray
dappled-grey
dash-pot
de-escalation
de-iodination
de-nazification
de-stalinisation
de-stalinization
deaf-aid
deaf-mute
deaf-muteness
deaf-mutism
deck-house
den-mother
devil-worship
die-sinker
diesel-electric
ding-dong
dining-hall
dining-room
dive-bombing
do-gooder
do-nothing
dock-walloper
doctor-fish
dog-ear
dog-iron
dot-com
double-bogey
double-crosser
double-crossing
double-dealer
double-dealing
double-decker
double-magnum
double-prop
double-spacing
double-u
down-bow
drive-in
drop-leaf
drop-off
drop-seed
dye-works
ear-shell
earth-ball
earth-closet
earth-god
earth-goddess
earth-tongue
end-all
end-plate
evening-snow
ex-boyfriend
ex-gambler
ex-husband
ex-mayor
ex-president
ex-serviceman
ex-spouse
ex-wife
eye-beaming
eye-catcher
eye-drop
eye-lotion
face-off
fail-safe
fair-mindedness
falcon-gentil
falcon-gentle
fall-board
fan-jet
fare-stage
farm-place
father-figure
father-god
feather-foil
fence-sitter
fig-bird
fill-in
finger-flower
finger-painting
finger-pointing
finger-roll
finger-root
fire-bush
fire-eater
fire-raising
fire-swallower
fire-wheel
fire-worship
fish-fly
fish-worship
flag-waver
flame-flower
flame-out
flannel-cake
flare-up
flash-forward
flick-knife
flip-flop
floating-moss
fly-by
fly-fishing
follow-on
follow-through
follow-up
foot-lambert
foot-pound
foot-poundal
foot-ton
force-out
fore-topmast
fore-topsail
fore-wing
fort-lamy
foster-brother
foster-child
foster-daughter
foster-father
foster-mother
foster-nurse
foster-parent
foster-sister
foster-son
foul-up
fox-trot
frame-up
free-lance
free-liver
free-reed
front-runner
front-stall
frost-weed
fur-piece
fuss-budget
gall-berry
gallows-tree
games-master
games-mistress
garment-worker
gee-gee
get-go
glass-cutter
go-between
go-cart
go-getter
go-kart
go-slow
goggle-eye
going-over
gold-beater
gold-worker
golf-club
good-by
good-bye
good-neighborliness
good-neighbourliness
goof-off
goose-tansy
grease-gun
green-blindness
ground-berry
ground-shaker
grouse-berry
gum-lac
gun-sight
ha-ha
hack-driver
half-breed
half-brother
half-caste
half-century
half-cock
half-holiday
half-hour
half-intensity
half-length
half-life
half-light
half-mast
half-moon
half-pay
half-pint
half-relief
half-sister
half-slip
half-staff
half-term
half-truth
half-wit
handle-bars
hang-up
harlequin-snake
harvest-lice
has-been
have-not
haw-haw
head-shrinker
heads-up
heart-leaf
hemming-stitch
high-five
high-handedness
high-low
high-mindedness
high-rise
high-spiritedness
high-up
hip-hop
hire-purchase
hock-joint
hold-down
hollow-back
home-builder
home-farm
honey-flower
hoof-mark
hop-picker
horse-brier
horse-cart
horse-head
horse-pistol
horse-trail
hot-rod
house-builder
house-raising
hugger-mugger
hum-vee
ice-skater
ice-wagon
in-basket
in-fighting
in-joke
in-law
in-migration
in-tray
iron-gray
iron-grey
iron-tree
island-dweller
jack-tar
jackknife-fish
jell-o
jerk-off
jew-baiter
jew-bush
jump-start
kitten-tails
knee-hi
knee-high
knife-edge
knife-handle
knight-errant
knock-knee
know-all
know-how
ladder-back
lamb-chop
lantern-fly
lash-up
lay-by
lay-up
lead-in
leaf-book
leaf-cutter
leaf-miner
leaf-roller
lean-to
lease-lend
leave-taking
left-handedness
left-hander
left-winger
leg-pull
leg-pulling
lend-lease
lie-in
light-mindedness
light-year
lights-out
line-shooter
line-shooting
lip-gloss
litter-basket
litter-bearer
live-bearer
live-forever
living-room
load-shedding
loan-blend
lock-gate
long-beard
long-legs
long-sufferance
long-suffering
look-over
loop-line
love-philter
love-philtre
love-potion
love-song
love-token
loving-kindness
low-down
low-spiritedness
lying-in
mailing-card
major-general
make-do
make-peace
make-up
make-work
man-child
man-eater
map-reader
marble-wood
match-up
mess-up
milk-vetch
mill-girl
mill-hand
mind-set
mingle-mangle
mist-flower
mix-up
mixed-blood
mock-heroic
mock-up
monkey-wrench
moo-cow
moon-curser
moon-ray
moon-worship
moor-bird
moss-trooper
mound-bird
muscle-builder
name-dropping
narrow-body
narrow-mindedness
needle-bush
needle-wood
night-light
night-line
night-robe
night-sight
night-stop
nosh-up
nurse-midwife
nutmeg-yew
off-broadway
off-day
off-licence
off-roader
off-season
off-white
one-billionth
one-dimensionality
one-eighth
one-fifth
one-fourth
one-half
one-hitter
one-hundredth
one-liner
one-millionth
one-ninth
one-off
one-quadrillionth
one-quarter
one-quintillionth
one-seventh
one-sixteenth
one-sixth
one-sixtieth
one-spot
one-step
one-tenth
one-third
one-thousandth
one-trillionth
one-twelfth
one-upmanship
orb-weaver
order-chenopodiales
organ-grinder
out-basket
out-migration
out-tray
oyster-fish
paddle-box
paddle-wheeler
pall-mall
paper-mache
paper-pusher
part-owner
part-singing
part-timer
pass-through
paste-up
pay-phone
pay-station
peach-wood
pearl-fish
pearl-weed
pen-friend
pen-tail
pet-food
phase-out
phone-in
photo-offset
pi-meson
pick-off
pie-dog
pike-perch
pin-up
pine-weed
ping-pong
pip-squeak
piss-up
pitter-patter
place-kicker
place-kicking
place-worship
plank-bed
play-actor
play-box
plug-in
plug-ugly
plum-yew
pocket-handkerchief
poison-berry
pond-skater
pony-trekking
pop-fly
pop-up
pork-fish
post-horse
post-impressionist
post-it
post-maturity
post-menopause
press-up
price-fixing
prickle-weed
priest-doctor
prison-breaking
process-server
pull-in
pull-off
pull-through
pull-up
pulley-block
punch-up
push-bike
put-down
put-on
put-put
quack-quack
quarter-century
quarter-circle
quarter-hour
quarter-tone
quarter-vine
quick-wittedness
r-2
rabbit-weed
radio-gramophone
radio-opacity
radio-phonograph
rail-splitter
rain-giver
rain-wash
rake-off
rat-catcher
rat-tat
rattle-top
rave-up
razor-fish
razzle-dazzle
read-out
ready-made
ready-mix
record-breaker
record-holder
record-keeper
recruiting-sergeant
red-berry
red-blindness
red-header
rent-rebate
rent-roll
rent-seeking
rest-cure
rest-harrow
right-handedness
right-hander
right-winger
ring-binder
rip-off
ripple-grass
roll-on
rope-maker
rose-root
rubber-necking
run-in
run-through
run-time
run-up
rush-grass
sailing-race
save-all
say-so
scene-stealer
scrub-bird
second-rater
second-stringer
send-off
send-up
serpent-worship
set-back
set-to
shake-up
shall-flower
shape-up
share-out
sharp-sightedness
shell-flower
ship-breaker
shoe-shop
shoo-in
shoot-down
short-grass
short-stop
shove-ha'penny
shove-halfpenny
show-off
show-stopper
shrimp-fish
shrink-wrap
shut-eye
shut-in
side-glance
side-look
side-wheeler
side-whiskers
silver-bush
silver-lace
silver-tip
silver-worker
single-foot
single-leaf
single-mindedness
single-spacing
sit-down
sit-in
sit-up
ski-plane
skin-dive
skin-diver
skunk-weed
sky-blue
slant-eye
slave-maker
sleep-learning
slip-on
slip-up
slop-seller
slow-wittedness
small-arm
smash-up
snail-flower
snake-fish
snake-head
snarl-up
snow-blindness
snuff-color
snuff-colour
soap-rock
soap-weed
soldier-fish
soul-searching
soup-fin
soup-strainer
space-time
spear-point
speed-reading
spell-checker
spend-all
spin-off
splash-guard
split-pea
spot-weld
spot-welder
spot-welding
spring-cleaning
square-bashing
square-rigger
squint-eye
stalking-horse
stand-down
stand-in
star-duckweed
star-glory
star-thistle
start-off
stem-winder
step-down
step-in
step-up
stock-take
stock-taker
stock-taking
stone-face
stone-root
straight-arm
stretcher-bearer
sub-assembly
sub-interval
sub-test
sugar-bush
sum-up
sun-ray
sun-worship
swan-flower
swan-neck
sweep-second
switch-hitter
switch-ivy
symbol-worship
tail-flower
tailor-made
take-in
take-up
tap-off
tar-wood
taste-maker
taste-tester
tax-exempt
tax-increase
tea-strainer
teach-in
teeter-totter
tent-fly
test-cross
text-matching
thick-knee
third-dimensionality
third-rater
thought-image
thought-reader
thread-fish
throw-in
throw-weight
tick-weed
tie-in
tie-up
time-ball
time-fuse
time-out
time-switch
tin-plating
tip-off
title-holder
toe-in
tone-beginning
tongue-fish
tongue-flower
tongue-lashing
top-up
toss-up
touch-typist
trade-in
trade-last
trade-off
tread-wheel
tree-frog
tree-worship
trend-setter
trip-up
triple-decker
triple-spacing
trumpet-wood
try-on
tub-cart
tub-thumper
tucker-bag
tumble-dryer
tune-up
turn-on
twin-prop
up-bow
up-tick
used-car
value-system
velvet-leaf
vent-hole
wagon-lit
wake-robin
walk-in
walk-on
walk-through
walk-up
wall-paperer
ward-heeler
warm-up
washing-up
waste-yard
water-color
water-colour
water-mint
water-rate
water-shield
water-skiing
water-target
watered-silk
wave-off
wax-chandler
weed-whacker
well-being
well-wisher
well-wishing
wet-nurse
whip-round
whip-scorpion
whip-snake
whistle-blower
whiz-kid
whizz-kid
willow-pattern
winding-clothes
winding-sheet
window-washing
wine-colored
wine-coloured
wing-nut
wire-puller
wish-wash
witch-hunt
witch-hunter
woman-worship
wood-creeper
wood-fern
wood-frog
wood-rat
word-painter
word-painting
word-splitting
word-worship
work-board
work-clothes
work-clothing
work-in
work-shirt
world-beater
world-weariness
write-down
write-in
write-off
yellow-blindness
yes-man
be-all
break-axe
cease-fire
counter-revolution
counter-sabotage
cross-classification
cross-division
cross-eye
cross-purpose
cross-question
cross-stitch
cure-all
dangle-berry
dash-pot
do-good
do-nothing
drop-leaf
drop-seed
end-all
fuss-budget
knock-knee
know-all
make-peace
make-work
rest-harrow
save-all
shut-eye
shove-ha'penny
shove-halfpenny
spend-all
squint-eye
sweep-second
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment