A dictionary magician in the form of a module!
- What is it?
- Features
- Why should I use Vocabulary
- Installation
- Usage
- How does it Work
- Contributing
- Changelog
- Bugs
- License
For a given word, using Vocabulary
, you can get it's
- Meaning
- Synonyms
- Antonyms
- Part of speech : whether the word is a
noun
,interjection
or anadverb
et el - Usage example : a quick example on how to use the word in a sentence
- Pronuciation
- Hyphenation : shows the particular stress points(if any)
- Written in uncomplicated
Python
- Returns
JSON
objects - Minimum dependencies ( just uses
requests
(https://github.com/kennethreitz/requests)) - Easy to install
- A decent substitute to
Wordnet
(well almost!) Wanna see? Here is a small comparison - Stupidly easy to use
- Fast!
- Supports
- both,
python2.*
andpython3.*
- Works on Mac, Linux and Windows
- both,
Wordnet
is a great resource. No doubt about it! So why should you use Vocabulary
when we already have Wordnet
out there?
My 2 cents
Let's say you want to find out the synonyms for the word car
.
- Using
Wordnet
>>> from nltk.corpus import wordnet
>>> syns = wordnet.synsets('car')
>>> syns[0].lemmas[0].name
'car'
>>> [s.lemmas[0].name for s in syns]
['car', 'car', 'car', 'car', 'cable_car']
>>> [l.name for s in syns for l in s.lemmas]
['car', 'auto', 'automobile', 'machine', 'motorcar', 'car', 'railcar', 'railway_car', 'railroad_car', 'car', 'gondola', 'car', 'elevator_car', 'cable_car', 'car']
- Doind the same using
Vocabulary
>>> from vocabulary import Vocabulary as vb
>>> vb.synonym("car")
'[{"seq": 0, "text": "automotive"}, {"seq": 1, "text": "motor"}, {"seq": 2, "text": "wagon"}, {"seq": 3, "text": "cart"}, {"seq": 4, "text": "automobile"}]'
>>> ## load the json data
>>> car_synonyms = json.loads(vb.synonym("car"))
>>> type(car_synonyms)
<class 'list'>
>>>
So there you go. You get the data in an easy JSON
format.
You can go on comparing for the other methods too.
Option 1: installing through pip (Suggested way)
$ pip install vocabulary
If you are behind a proxy
$ pip --proxy [username:password@]domain_name:port install vocabulary
Note: If you get command not found
then $ sudo apt-get install python-pip
should fix that
$ git clone https://github.com/prodicus/vocabulary.git
$ cd vocabulary/
$ pip install -r requirements.txt
$ python setup.py install
$ pip uninstall vocabulary
A Simple demonstration of the module
## Importing the module
>>> from vocabulary import Vocabulary as vb
## Extracting "Meaning"
>>> vb.meaning("hillbilly")
'[{"text": "Someone who is from the hills; especially from a rural area, with a connotation of a lack of refinement or sophistication.", "seq": 0}, {"text": "someone who is from the hills", "seq": 1}, {"text": "A white person from the rural southern part of the United States.", "seq": 2}]'
>>>
## "Synonym"
>>> vb.synonym("hurricane")
'[{"text": "storm", "seq": 0}, {"text": "tropical cyclone", "seq": 1}, {"text": "typhoon", "seq": 2}, {"text": "gale", "seq": 3}]'
>>>
## "Antonym"
>>> vb.antonym("respect")
'{"text": ["disesteem", "disrespect"]}'
>>> vb.antonym("insane")
'{"text": ["sane"]}'
## "Part of Speech"
>>> vb.part_of_speech("hello")
'[{"text": "interjection", "example:": "Used to greet someone, answer the telephone, or express surprise.", "seq": 0}]'
>>>
## "Usage Examples"
>>> vb.usage_example("chicanery")
'[{"text": "The Bush Administration is now the commander-in-theif (lower-case intentional) thanks to their chicanery.", "seq": 0}]'
>>>
## "Pronunciation"
>>> vb.pronunciation("hippopotamus")
[{'raw': '(hĭpˌə-pŏtˈə-məs)', 'rawType': 'ahd-legacy', 'seq': 0}, {'raw': 'HH IH2 P AH0 P AA1 T AH0 M AH0 S', 'rawType': 'arpabet', 'seq': 0}]
>>>
## "Hyphenation"
>>> vb.hyphenation("hippopotamus")
'[{"text": "hip", "type": "secondary stress", "seq": 0}, {"text": "po", "seq": 1}, {"text": "pot", "type": "stress", "seq": 2}, {"text": "a", "seq": 3}, {"text": "mus", "seq": 4}]'
>>> vb.hyphenation("amazing")
'[{"text": "a", "seq": 0}, {"text": "maz", "type": "stress", "seq": 1}, {"text": "ing", "seq": 2}]'
>>>
If you need to see the usage for any of the methods, do a
>>> from vocabulary import Vocabulary as vb
>>> help(vb.meaning)
Help on function meaning in module vocabulary.vocabulary:
meaning(phrase, source_lang='en', dest_lang='en')
make calls to the
- glosbe API(default choice)
- Wordnik API
Wordnik's API gives less results so not Using it here for getting the meanings
params:
=======
source_lang, dest_lang (both default to "en" if nothing is specified)
Usage:
======
>>> from vocabulary import Vocabulary as vb
>>> vb.meaning("levitate")
'[{"text": "(intransitive) Be suspended in the air, as if in defiance of gravity.", "seq": 0}, {"text": "(transitive) To cause to rise in the air and float, as if in defiance of gravity.", "seq": 1}]'
>>>
(END)
and so on for other functions
Under the hood, it makes use of 4 awesome API's to give you consistent results. The API's being
- Wordnik
- Glosbe
- BighugeLabs
- Urbandict
create a virtualenv first:
- Fork it.
- Clone it
$ virtualenv develop # Create virtual environment
$ source develop/bin/activate # Change default python to virtual one
(develop)$ pip install -r requirements.txt # Install requirements for 'Vocablary' in virtual environment
(develop)$ git clone https://github.com/prodicus/vocabulary.git
Or, if virtualenv
is not installed on your system:
$ wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
$ python virtualenv.py develop # Create virtual environment
$ source develop/bin/activate # Change default python to virtual one
(develop)$ pip install -r requirements.txt # Install requirements for 'Vocablary' in virtual environment
(develop)$ git clone https://github.com/prodicus/vocabulary.git
- Create your feature branch (
$ git checkout -b my-new-awesome-feature
) - Commit your changes (
$ git commit -am 'Added <xyz> feature'
) - Run tests
(develop) $ ./tests.py -v
If everything is running fine, integrate your feature
- Push to the branch (
$ git push origin my-new-awesome-feature
) - Create new Pull Request
Hack away!
- Add translate module
- Add an option like json=False or json=True where the former returns a list object
Vocabulary
uses unittesting
for testing purposes.
Running the test cases
$ ./tests.py -v
test_antonym_1 (__main__.TestModule) ... ok
test_antonym_2 (__main__.TestModule) ... ok
test_hyphenation (__main__.TestModule) ... ok
test_meaning (__main__.TestModule) ... ok
test_partOfSpeech_1 (__main__.TestModule) ... ok
test_partOfSpeech_2 (__main__.TestModule) ... ok
test_pronunciation (__main__.TestModule) ... ok
test_synonym (__main__.TestModule) ... ok
test_usageExamples (__main__.TestModule) ... ok
----------------------------------------------------------------------
Ran 9 tests in 7.742s
OK
(testvocab)
- When using the method
>>> vb.pronunciation("hippopotamus")
[{'raw': '(hĭpˌə-pŏtˈə-məs)', 'rawType': 'ahd-legacy', 'seq': 0}, {'raw': 'HH IH2 P AH0 P AA1 T AH0 M AH0 S', 'rawType': 'arpabet', 'seq': 0}]
>>> type(vb.pronunciation("hippopotamus"))
<class 'list'>
>>> json.dumps(vb.pronunciation("hippopotamus"))
'[{"raw": "(h\\u012dp\\u02cc\\u0259-p\\u014ft\\u02c8\\u0259-m\\u0259s)", "rawType": "ahd-legacy", "seq": 0}, {"raw": "HH IH2 P AH0 P AA1 T AH0 M AH0 S", "rawType": "arpabet", "seq": 0}]'
>>>
You are being returned a list
object instead of a JSON
object. When returning the latter, there are some unicode
issues. A fix for this will be released soon.
Join us on our Gitter channel if you want to chat or if you have any questions.
JSON
inconsistency fixed for the methodsVocabulary.hyphenation()
Vocabulary.part_of_speech()
Vocabulary.meaning()
Please report the bugs at the issue tracker
You can find a copy of the License at http://prodicus.mit-license.org/