- Python 2.7 with
pip
- Required Python packages in requirements.txt
- PostgreSQL 9.3 required for directory service
- Node.js > v0.10 for pizza service
- Web server capable of running wsgi applications for deployment
We recommend installing PAL in a python virtual environment by using the virtualenv
package.
Use pip to install virtualenv then create a new virtualenv in the pal directory
virtualenv env
and activate the virtual environment
source env/bin/activate
If not using the directory service and/or PostgreSQL is not installed, remove the line containing
psycopg2
from the requirements.txt
file. Install the required packages
pip install -r requirements.txt
Next, install the required nltk
libraries. Open a python shell and type
>>> import nltk
>>> nltk.download()
and install maxent_ne_chunker
, maxent_treebank_pos_tagger
, punkt
, qc
, and words
.
Obtain API keys for TMDB, Wolfram, and Yelp and insert them into config.py
.
Obtain a Facebook app ID and insert it into static/home.js
.
PAL is now ready to run locally. Start it by running python server.py
.
PAL can be accessed by connecting to localhost:5000
in a browser.
To ensure that queries are properly sorted into the proper services, hill climbing should be run. From the base directory, run
python -m pal.heuristics/hill_climb.hill_climb
After running hill climbing, updated heuristics values can be found in the
pal/heuristics/hill_climb/climbed_values
directory, and will be automatically
referenced by the rest of PAL. Hill climbing should be re-run whenever a new
service is added to PAL.
The pizza service requires Node.js or io.js. Install one of these and npm
.
Navigate to the api/dominos
directory and run
npm install
Next, install forever
with
npm install -g forever
Start the pizza server with
forever start server.js
In order for the directory service to function, the directory must be
pre-scraped. Navigate to the api/directory
directory. Insert the
username and password for the database in the stalkernet_scraper.py
file with the format postgresql://username:password@database_url/table_name
Create the database schema by running
python models.py
Populate the buildings, majors, and departments tables by running
python stalkernet_scraper.py -b buildings.txt
python stalkernet_scraper.py -m majors.txt
python stalkernet_scraper.py -d depts.txt
Finally, scrape the directory with
python stalkernet_scraper.py -s
PAL can be run by Apache HTTP Server by using the mod_wsgi
module.
The Flask documentation has pretty detailed instructions on how to set
this up. Please see http://flask.pocoo.org/docs/0.10/deploying/mod_wsgi/
-
Bon Appetit (actively scraped from [Bon Appetit website] (http://carleton.cafebonappetit.com/cafe/))
- Single dining hall, single day, any or all meals
-
Dictionary/Thesaurus (actively scraped from [dictionary] (http://dictionary.reference.com/browse/) or [thesaurus] (http://www.thesaurus.com/browse/))
- Definitions
- Synonyms
- Antonyms
-
Directory (pre-scraped from [Carleton campus directory] (http://apps.carleton.edu/campus/directory/))
- Single-person queries
- Professor offices / Student rooms
- email addresses (both)
- phone numbers (both)
- departments/majors (professors/students)
- Class year
- Multi-person queries
- All students on a floor / in a dorm
- All students for a given major
- All professors in a department
- "Show me all the Brians on campus"
- Single-person queries
-
Dominos (requests to [Dominos online order] (https://order.dominos.com/en/pages/order/))
- Pizza cost
- price of a single pizza
- price of multiple same pizzas
- price of multiple different pizzas
- Pizza orders
- order a single pizza
- order multiple same pizzas
- order multiple different pizzas
- Pizza cost
-
Facebook (requests to [Facebook Graph API] (https://developers.facebook.com/docs/graph-api))
- Post to timeline on behalf of user
-
Movies (using the [TMDB API] (https://www.themoviedb.org/documentation/api))
- What movies was this person involved in (acting, directing, etc.)
- Was this person involved in this movie?
- How many movies was this person involved in?
- When did this movie come out?
- Who acted/directed/etc. in this movie?
- Who played this character in this movie?
-
Translations (requests through [UltraLingua REST API] (http://api.ultralingua.com/ulapi/rest)
- From English to {Spanish, French, German, Italian, Portuguese}
- From {Spanish, French, German, Italian, Portuguese} to English
- Between {Spanish, French, German, Italian, Portuguese}
- Use correct SpeechSynthesisVoice for the destination language
-
Weather (requests to [Yahoo weather API] (https://query.yahooapis.com/v1/public/yql?))
- High/low temperatures
- Snow/rain
- General forecast
- Geolocation
-
Wolfram|Alpha (requests using [Wolfram|Alpha's API] (http://products.wolframalpha.com/api/))
- Run queries on natural language and get numerical output
- Keep track of our limited number of queries (difficult due to concurrency issues)
-
Yelp (requests to [Yelp API] (http://www.yelp.com/developers/documentation))
- Businesses by search terms
- Ratings, URL, Phone Number
- Find by location
- Businesses appear on map