Skip to content

Latest commit

 

History

History
235 lines (175 loc) · 21.9 KB

File metadata and controls

235 lines (175 loc) · 21.9 KB

ParallelDots-Python-API

A wrapper for the ParallelDots API.

Installation

From PyPI:

pip install paralleldots

From Source:

https://github.com/ParallelDots/ParallelDots-Python-API.git
python setup.py install

API Keys & Setup

Signup and get your free API key from ParallelDots. You will receive a mail containing the API key at the registered email id.

Configuration:

>>> from paralleldots import set_api_key, get_api_key

# Setting your API key
>>> set_api_key( "YOUR API KEY" )

# Viewing your API key
>>> get_api_key()

Languages Supported:

  • Portuguese ( pt )
  • Simplified Chinese ( Not available in multilingual keyword generator API ) ( zh )
  • Spanish ( es )
  • German ( de )
  • French ( fr )
  • Dutch ( nl )
  • Italian ( it )
  • Japanese ( ja )
  • Thai ( th )
  • Danish ( da )
  • Finnish ( fi )
  • Greek ( el )
  • Russian ( ru )
  • Arabic ( ar )

Supported APIs:

  • Abuse
  • Custom Classifier
  • Emotion
  • Facial Emotion
  • Intent
  • Keywords
  • Multilanguage Keywords ( Supports Multiple Languages )
  • Named Entity Extraction/Recognition ( NER )
  • Not Safe For Work ( NSFW Image Classifier )
  • Phrase Extractor
  • Popularity ( Image Classifier )
  • Object Recognizer
  • Sentiment Analysis
  • Target Sentiment Analysis
  • Semantic Similarity
  • Taxonomy
  • Text Parser
  • Usage

Examples

>>> import paralleldots
>>> api_key   = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
>>> text      = "Chipotle in the north of Chicago is a nice outlet. I went to this place for their famous burritos but fell in love with their healthy avocado salads. Our server Jessica was very helpful. Will pop in again soon!"
>>> path      = "/home/my_computer/Downloads/image_1.jpg"
>>> aspect    = "food"
>>> lang_code = "fr"
>>> lang_text = "C'est un environnement très hostile, si vous choisissez de débattre ici, vous serez vicieusement attaqué par l'opposition."
>>> category  = [ "travel","food","shopping", "market" ]
>>> url       = "http://i.imgur.com/klb812s.jpg"
>>> data      =  [ "drugs are fun", "don\'t do drugs, stay in school", "lol you a fag son", "I have a throat infection" ]
>>> paralleldots.set_api_key( api_key )
>>> print( "API Key: %s" % paralleldots.get_api_key() )
>>> print( "\nAbuse" )
>>> print( paralleldots.abuse( text ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "sentence_type":"Non Abusive", "confidence_score":0.876953}
>>> print( "\nBatch Abuse" )
>>> print( paralleldots.batch_abuse( data ) )
{'batch': [{'confidence_score': 0.904297, 'code': 200, 'sentence_type': 'Non Abusive'}, {'confidence_score': 0.953125, 'code': 200, 'sentence_type': 'Non Abusive'}, {'confidence_score': 0.884766, 'code': 200, 'sentence_type': 'Abusive'}, {'confidence_score': 0.859375, 'code': 200, 'sentence_type': 'Non Abusive'}]}
>>> print( "\nCustom Classifier" )
>>> print( paralleldots.custom_classifier( text, category ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", {"taxonomy":[{"category":"food","confidence_score":0.9879363775},{"category":"market","confidence_score":0.4590245783},{"category":"travel","confidence_score":0.3219315708},{"category":"shopping","confidence_score":0.0089879232}]}}
>>> print( "\nEmotion" )
>>> print( paralleldots.emotion( text ) )
{"emotion":{"emotion":"Happy", "probabilities":{"Sarcasm":0.0, "Angry":0.04090321436524391, "Sad":0.0, "Fear":0.0, "Bored":0.0, "Excited":0.07638891041278839, "Happy":0.1223890483379364}}, "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions"}
>>> print( "\nBatch Emotion" )
>>> print( paralleldots.batch_emotion( data ) )
{'batch': [{'emotion': {'probabilities': {'Sarcasm': 0.14361357966835644, 'Angry': 0.08368749025924326, 'Sad': 0.025132654797074747, 'Fear': 0.344180628127824, 'Bored': 0.06818537695928778, 'Excited': 0.2082173830066366, 'Happy': 0.1269828871815771}, 'emotion': 'Fear'}, 'code': 200}, {'emotion': {'probabilities': {'Sarcasm': 0.09578231410218406, 'Angry': 0.28458333402617014, 'Sad': 0.05735552847026735, 'Fear': 0.13348989058422842, 'Bored': 0.21483391837268373, 'Excited': 0.10118401124107868, 'Happy': 0.11277100320338784}, 'emotion': 'Angry'}, 'code': 200}, {'emotion': {'probabilities': {'Sarcasm': 0.11124312097614852, 'Angry': 0.1216389498218648, 'Sad': 0.05410169293913279, 'Fear': 0.18020579627989994, 'Bored': 0.2922536573298578, 'Excited': 0.16457090063285224, 'Happy': 0.07598588202024392}, 'emotion': 'Bored'}, 'code': 200}, {'emotion': {'probabilities': {'Sarcasm': 0.05327575096045899, 'Angry': 0.46982189055546925, 'Sad': 0.3672790882763135, 'Fear': 0.09443579921654321, 'Bored': 0.005730775686542725, 'Excited': 0.004337021311595699, 'Happy': 0.005119673993076841}, 'emotion': 'Angry'}, 'code': 200}]}
>>> print( "\nEmotion - Lang: Fr". )
>>> print( paralleldots.emotion( lang_text, lang_code ) )
{"emotion":{"emotion":"Angry", "probabilities":{"Sarcasm":0.052613839507102966, "Angry":0.07304570078849792, "Sad":0.051657479256391525, "Fear":0.07096020132303238, "Bored":0.0, "Excited":0.0, "Happy":0.0}}, "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions"}
>>> print( "\nFacial Emotion" )
>>> print( paralleldots.facial_emotion( path ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "output":"No face detected."}
>>> print( "\nFacial Emotion: URL Method" )
>>> print( paralleldots.facial_emotion_url( url ) )
{"facial_emotion":[{"score":0.439317524433136, "tag":"Angry"}, {"score":0.18545667827129364, "tag":"Surprise"}, {"score":0.11217296868562698, "tag":"Sad"}, {"score":0.08146321028470993, "tag":"Neutral"}, {"score":0.06052987277507782, "tag":"Happy"}, {"score":0.06052987277507782, "tag":"Fear"}, {"score":0.06052987277507782, "tag":"Disgust"}], "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: https://www.paralleldots.com/terms-and-conditions"}
>>> print( "\nIntent" )
>>> print( paralleldots.intent( text ) )
{"probabilities":{"marketing":0.042, "spam/junk":0.003, "news":0.927, "feedback/opinion":0.024, "query":0.004}, "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "intent":"news"}
>>> print( "\nBatch Intent" )
>>> print( paralleldots.batch_intent( data ) )
{'batch': [{'probabilities': {'marketing': 0.116, 'spam/junk': 0.66, 'query': 0.002, 'feedback/opinion': 0.141, 'news': 0.08}, 'code': 200, 'intent': 'spam/junk'}, {'probabilities': {'marketing': 0.106, 'spam/junk': 0.423, 'query': 0.027, 'feedback/opinion': 0.393, 'news': 0.051}, 'code': 200, 'intent': 'spam/junk'}, {'probabilities': {'marketing': 0.001, 'spam/junk': 0.664, 'query': 0.001, 'feedback/opinion': 0.333, 'news': 0.001}, 'code': 200, 'intent': 'spam/junk'}, {'probabilities': {'marketing': 0.0, 'spam/junk': 0.124, 'query': 0.404, 'feedback/opinion': 0.469, 'news': 0.004}, 'code': 200, 'intent': 'feedback/opinion'}]}
>>> print( "\nKeywords" )
>>> print( paralleldots.keywords( text ) )
{"keywords":[{"keyword":"Prime Minister Narendra Modi", "confidence_score":0.857594}, {"keyword":"link", "confidence_score":0.913924}, {"keyword":"speech Human Resource", "confidence_score":0.70655}, {"keyword":"Smriti", "confidence_score":0.860351}, {"keyword":"Lok", "confidence_score":0.945534}], "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions"}
>>> print( "\nBatch Keywords" )
>>> print( paralleldots.batch_keywords( data ) )
{'batch': [{'keywords': [{'keyword': 'fun', 'confidence_score': 0.560126}], 'code': 200}, {'keywords': [{'keyword': 'drugs', 'confidence_score': 0.89078}, {'keyword': 'school', 'confidence_score': 0.867192}], 'code': 200}, {'keywords': [{'keyword': 'son', 'confidence_score': 0.731249}], 'code': 200}, {'keywords': [{'keyword': 'throat infection', 'confidence_score': 0.87782}], 'code': 200}]}
>>> print( "\nLanguage Detection" )
>>> print( paralleldots.language_detection( lang_text ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "output":"French", "code":200, "prob":0.9999592304229736}
>>> print( "\nBatch Language Detection" )
>>> print( paralleldots.batch_language_detection( data ) )
{'batch': [{'output': 'English', 'code': 200, 'prob': 0.960185170173645}, {'output': 'English', 'code': 200, 'prob': 0.9313138127326965}, {'output': 'English', 'code': 200, 'prob': 0.5287713408470154}, {'output': 'English', 'code': 200, 'prob': 0.8692556619644165}]}
>>> print( "\nMultilang Keywords - Lang: Fr". )
>>> print( paralleldots.multilang_keywords( lang_text, lang_code ) )
{"keywords":["cest", "très", "vicieusement", "attaqué", "hostile", "environnement", "débattre", "choisissez", "lopposition", "si"], "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions"}
>>> print( "\nNER" )
>>> print( paralleldots.ner( text ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "entities":[{"category":"name", "name":"Narendra Modi", "confidence_score":0.990574}, {"category":"name", "name":"Smriti Irani", "confidence_score":0.989922}, {"category":"name", "name":"Rohith Vemula", "confidence_score":0.839291}, {"category":"group", "name":"Lok Sabha", "confidence_score":0.80819}, {"category":"group", "name":"Dalit", "confidence_score":0.655424}, {"category":"group", "name":"Central University", "confidence_score":0.708817}, {"category":"place", "name":"Hyderabad", "confidence_score":0.591985}]}
>>> print( "\nBatch NER" )
>>> print( paralleldots.batch_ner( data ) )
{'batch': [{'entities': 'The statement belongs to none of the categories.', 'code': 200}, {'entities': [{'category': 'name', 'name': 'don', 'confidence_score': 0.671695}], 'code': 200}, {'entities': 'The statement belongs to none of the categories.', 'code': 200}, {'entities': 'The statement belongs to none of the categories.', 'code': 200}]}
>>> print( "\nNSFW" )
>>> print( paralleldots.nsfw( path ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "output":"not safe to open at work", "prob":0.9995405673980713}
>>> print( "\nNSFW: URL Method" )
>>> print( paralleldots.nsfw_url( url ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: https://www.paralleldots.com/terms-and-conditions", "output":"safe to open at work", "prob":0.979527473449707}
>>> print( "\nObject Recognizer" )
>>> print( paralleldots.object_recognizer( path ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "output":[{"score":0.8445611596107483, "tag":"Muscle"}, {"score":0.6443125605583191, "tag":"Limb"}, {"score":0.5493743419647217, "tag":"Arm"}, {"score":0.5155590772628784, "tag":"Person"}, {"score":0.39905625581741333, "tag":"Human body"}, {"score":0.39764025807380676, "tag":"Leg"}, {"score":0.3255367875099182, "tag":"Hand"}, {"score":0.2798691689968109, "tag":"Male person"}, {"score":0.25423258543014526, "tag":"Adult"}, {"score":0.2470093071460724, "tag":"Man"}]}
>>> print( "\nObject Recognizer: URL Method" )
>>> print( paralleldots.object_recognizer_url( url ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: https://www.paralleldots.com/terms-and-conditions", "output":[{"score":0.8752718567848206, "tag":"Dog"}, {"score":0.8702095746994019, "tag":"Pet"}, {"score":0.8646901249885559, "tag":"Mammal"}, {"score":0.8270695209503174, "tag":"Animal"}, {"score":0.2900576591491699, "tag":"Snow"}, {"score":0.22053982317447662, "tag":"Winter"}, {"score":0.1604217290878296, "tag":"Dog breed"}, {"score":0.14872552454471588, "tag":"Carnivore"}, {"score":0.08632490038871765, "tag":"Puppy"}, {"score":0.07958601415157318, "tag":"Wildlife"}]}
>>> print( "\nPhrase Extractor" )
>>> print( paralleldots.phrase_extractor( text ) )
{"keywords":[{"relevance_score":3, "keyword":"Hyderabad Central University"}, {"relevance_score":2, "keyword":"Rohith Vemula"}, {"relevance_score":2, "keyword":"JNU row"}, {"relevance_score":6, "keyword":"Human Resource Development Minister Smriti Irani"}, {"relevance_score":2, "keyword":"Lok Sabha"}, {"relevance_score":4, "keyword":"Prime Minister Narendra Modi"}, {"relevance_score":2, "keyword":"Dalit scholar"}], "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions"}
>>> print( "\nBatch Phrase Extractor" )
>>> print( paralleldots.batch_phrase_extractor( data ) )
{'batch': [{'keywords': [], 'code': 200}, {'keywords': [{'relevance_score': 1, 'keyword': 'school'}], 'code': 200}, {'keywords': [{'relevance_score': 2, 'keyword': 'fag son'}], 'code': 200}, {'keywords': [{'relevance_score': 2, 'keyword': 'throat infection'}], 'code': 200}]}
>>> print( "\nPopularity" )
>>> print( paralleldots.popularity( path ) )
{"Popular":"38.1271243095", "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "Not Popular":"61.8728756905"}
>>> print( "\nPopularity: URL Method" )
>>> print( paralleldots.popularity_url( url ) )
{"Popular":"68.9268052578", "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: https://www.paralleldots.com/terms-and-conditions", "Not Popular":"31.0731947422"}
>>> print( "\nSentiment" )
>>> print( paralleldots.sentiment( text ) )
{"probabilities":{"positive":0.266, "neutral":0.549, "negative":0.185}, "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "sentiment":"neutral"}
>>> print( "\nTarget Sentiment" )
>>> print( paralleldots.sentiment( text ) )
{"sentiment":{"negative":0.01,"neutral":0.738,"positive":0.251}, "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions"}
>>> print( "\nBatch Sentiment" )
>>> print( paralleldots.batch_sentiment( data ) )
{'batch': [{'probabilities': {'positive': 0.69, 'neutral': 0.265, 'negative': 0.046}, 'code': 200, 'sentiment': 'positive'}, {'probabilities': {'positive': 0.061, 'neutral': 0.578, 'negative': 0.361}, 'code': 200, 'sentiment': 'neutral'}, {'probabilities': {'positive': 0.527, 'neutral': 0.198, 'negative': 0.275}, 'code': 200, 'sentiment': 'positive'}, {'probabilities': {'positive': 0.077, 'neutral': 0.015, 'negative': 0.908}, 'code': 200, 'sentiment': 'negative'}]}
>>> print( "\nSentiment - Lang: Fr". )
>>> print( paralleldots.sentiment( lang_text, lang_code ) )
{"probabilities":{"positive":0.02, "neutral":0.291, "negative":0.689}, "usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "sentiment":"negative"}
>>> print( "\nSimilarity" )
>>> print( paralleldots.similarity( "I love fish and ice cream!", "fish and ice cream are the best!" ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "actual_score":0.848528, "normalized_score":4.936506}
>>> print( "\nTaxonomy" )
>>> print( paralleldots.taxonomy( text ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "taxonomy":[{"tag":"News and Politics/Law", "confidence_score":0.845402}, {"tag":"Hobbies & Interests/Workshops and Classes", "confidence_score":0.878964}, {"tag":"Business and Finance/Industries", "confidence_score":0.7353}]}
>>> print( "\nBatch Taxonomy" )
>>> print( paralleldots.batch_taxonomy( data ) )
{'batch': [{'taxonomy': [{'tag': 'health and fitness/drugs', 'confidence_score': 0.996437}, {'tag': 'family and parenting/babies and toddlers', 'confidence_score': 0.967404}, {'tag': 'automotive and vehicles/motor shows', 'confidence_score': 0.6848993897438049}], 'code': 200}, {'taxonomy': [{'tag': 'health and fitness/dental care', 'confidence_score': 0.977439}, {'tag': 'family and parenting/babies and toddlers', 'confidence_score': 0.961832}, {'tag': 'education/school', 'confidence_score': 0.970684}], 'code': 200}, {'taxonomy': [{'tag': 'family and parenting/parenting teens', 'confidence_score': 0.9779467582702637}, {'tag': 'health and fitness/therapy', 'confidence_score': 0.972425}, {'tag': 'pets/cats', 'confidence_score': 0.9049649834632874}], 'code': 200}, {'taxonomy': [{'tag': 'health and fitness/disease', 'confidence_score': 0.985712}, {'tag': 'family and parenting/adoption', 'confidence_score': 0.974752}, {'tag': 'pets/cats', 'confidence_score': 0.97041}], 'code': 200}]}
>>> print( "\nText Parser" )
>>> print( paralleldots.text_parser( text ) )
{"usage":"By accessing ParallelDots API or using information generated by ParallelDots API, you are agreeing to be bound by the ParallelDots API Terms of Use: http://www.paralleldots.com/terms-and-conditions", "output":[{"text":"Prime", "Dependency":"compound", "Tags":"noun"}, {"text":"Minister", "Dependency":"compound", "Tags":"noun"}, {"text":"Narendra", "Dependency":"compound", "Tags":"noun"}, {"text":"Modi", "Dependency":"nominal subject", "Tags":"noun"}, {"text":"tweeted", "Dependency":"root", "Tags":"verb"}, {"text":"a", "Dependency":"determiner", "Tags":"determiner"}, {"text":"link", "Dependency":"direct object", "Tags":"noun"}, {"text":"to", "Dependency":"prepositional modifier", "Tags":"preposition or conjunction"}, {"text":"the", "Dependency":"determiner", "Tags":"determiner"}, {"text":"speech", "Dependency":"compound", "Tags":"noun"}, {"text":"Human", "Dependency":"compound", "Tags":"noun"}, {"text":"Resource", "Dependency":"compound", "Tags":"noun"}, {"text":"Development", "Dependency":"compound", "Tags":"noun"}, {"text":"Minister", "Dependency":"compound", "Tags":"noun"}, {"text":"Smriti", "Dependency":"compound", "Tags":"noun"}, {"text":"Irani", "Dependency":"object of a preposition", "Tags":"noun"}, {"text":"in", "Dependency":"prepositional modifier", "Tags":"preposition or conjunction"}, {"text":"the", "Dependency":"determiner", "Tags":"determiner"}, {"text":"Lok", "Dependency":"compound", "Tags":"noun"}, {"text":"Sabha", "Dependency":"object of a preposition", "Tags":"noun"}, {"text":"during", "Dependency":"prepositional modifier", "Tags":"preposition or conjunction"}, {"text":"the", "Dependency":"determiner", "Tags":"determiner"}, {"text":"debate", "Dependency":"object of a preposition", "Tags":"noun"}, {"text":"on", "Dependency":"prepositional modifier", "Tags":"preposition or conjunction"}, {"text":"the", "Dependency":"determiner", "Tags":"determiner"}, {"text":"ongoing", "Dependency":"adjectival modifier", "Tags":"adjective"}, {"text":"JNU", "Dependency":"compound", "Tags":"noun"}, {"text":"row", "Dependency":"object of a preposition", "Tags":"noun"}, {"text":"and", "Dependency":"coordinating conjunction", "Tags":"conjuction"}, {"text":"the", "Dependency":"determiner", "Tags":"determiner"}, {"text":"suicide", "Dependency":"conjunct", "Tags":"noun"}, {"text":"of", "Dependency":"prepositional modifier", "Tags":"preposition or conjunction"}, {"text":"Dalit", "Dependency":"compound", "Tags":"noun"}, {"text":"scholar", "Dependency":"compound", "Tags":"noun"}, {"text":"Rohith", "Dependency":"compound", "Tags":"noun"}, {"text":"Vemula", "Dependency":"object of a preposition", "Tags":"noun"}, {"text":"at", "Dependency":"prepositional modifier", "Tags":"preposition or conjunction"}, {"text":"the", "Dependency":"determiner", "Tags":"determiner"}, {"text":"Hyderabad", "Dependency":"compound", "Tags":"noun"}, {"text":"Central", "Dependency":"compound", "Tags":"noun"}, {"text":"University", "Dependency":"object of a preposition", "Tags":"noun"}]}
>>> paralleldots.usage()
{ "paying": False, "visual_monthly_quota": 100, "visual_daily_quota": 1000, "monthly_quota": 10000, "daily_quota": 1000, "excel_monthly_quota": 1000, "excel_daily_quota": 100 }