wordnet
2022-02-20
Common Lisp interface to WordNet
Background and Introduction
Professor George Miller of the Cognitive Science Laboratory of Princeton University directed the development a lexicographic database called WordNet.
Princeton maintains a server by which the WordNet database can be browsed via the World Wide Web.
The WordNet database is implemented as a set of text files. Mark Nahabedian (naha@mit.edu) has developed an interface to this database written in Common Lisp. This software provides an interface by which Common Lisp programs can access lexicographic data from WordNet.
2 Min Overview
Some Exported Functions
A complete list can be found in packages.lisp with more documentation here.
wordnet
- synsets-containing-word/s
- get-synonyms
- get-antonyms
- synset-words
- part-of-speech
- cached-index-lookup
- index-entry-synsets
NOTE 1: A point of note is the part-of-speech
. Arguments with this name can take the value :noun
, :adjective
, :verb
or :adverb
.
NOTE 2: I am not the author - these examples and explanations are all that I understand. There is more documentation available at the original repo - this is a forked one. Further, I have made part-of-speech as an optional argument in synsets-containing-word/s
, and get-synonyms
; the former function is named synsets-containing-words
in the original repo.
Class Hierarchy
(wordnet-object ;; private (wordnet-synset-entry (wordnet-noun-entry wordnet-verb-entry wordnet-adjective-entry wordnet-adverb-entry) (wordnet-index-entry) (wordnet-pointer))
Examples
CL-USER> (ql:quickload 'wordnet) (WORDNET) CL-USER> (use-package :wordnet) T CL-USER> (setq dog-synsets (synsets-containing-word/s "dog" :noun) ;; The first argument could be :dog or "dog" as well ;; The second argument is optional, if given, it could be :verb, :adverb or :adjective (#<WORDNET-NOUN-ENTRY dog domestic_dog Canis_familiaris {1001CB36A3}> #<WORDNET-NOUN-ENTRY frump dog {1001CB7FD3}> #<WORDNET-NOUN-ENTRY dog {1001CBAAF3}> #<WORDNET-NOUN-ENTRY cad bounder blackguard dog hound heel {1001CBF193}> #<WORDNET-NOUN-ENTRY frank frankfurter hotdog hot_dog dog wiener wienerwurst weenie {1001CC4373}> #<WORDNET-NOUN-ENTRY pawl detent click dog {1001CC8053}> #<WORDNET-NOUN-ENTRY andiron firedog dog dog-iron {1001CCB733}>) CL-USER> (get-synonyms :joy) ;; an optional argument specifying part-of-speech can also be supplied (("joy" 0) ("joyousness" 0) ("joyfulness" 0) ("joy" 0) ("delight" 0) ("pleasure" 0)) CL-USER> (get-antonyms 'joy :noun) ;; part-of-speech is not optional here ("sorrow") ;;; ======== The above functions are implemented in examples.lisp ========== ;; The list of the exported functions can be found in packages.lisp. CL-USER> (synset-words (first dog-synsets)) (("dog" 0) ("domestic_dog" 0) ("Canis_familiaris" 0)) CL-USER> (part-of-speech (first dog-synsets)) :NOUN CL-USER> (setq dog (cached-index-lookup 'dog :noun)) #<WORDNET-INDEX-ENTRY NOUN dog {100298AD33}> CL-USER> (setq dog-synsets (index-entry-synsets dog)) (#<WORDNET-NOUN-ENTRY dog domestic_dog Canis_familiaris {100291AAB3}> #<WORDNET-NOUN-ENTRY frump dog {100291F3E3}> #<WORDNET-NOUN-ENTRY dog {1002921F33}> #<WORDNET-NOUN-ENTRY cad bounder blackguard dog hound heel {10029265D3}> #<WORDNET-NOUN-ENTRY frank frankfurter hotdog hot_dog dog wiener wienerwurst weenie {100292B9F3}> #<WORDNET-NOUN-ENTRY pawl detent click dog {100292F6D3}> #<WORDNET-NOUN-ENTRY andiron firedog dog dog-iron {1002932DC3}>)