A visualization tool to support literature review. Originally a project for CS547 at UBC, a course on Information Visualization (http://www.cs.ubc.ca/~tmm/courses/547-14/) taught by Tamara Munzner (http://www.cs.ubc.ca/~tmm/).
A demo of the system is available at: http://paperquest.github.io
The source code is available on GitHub: https://github.com/paperquest/paperquest.github.io
You can contact the authors with any issues or suggestions at the following email addresses:
This project will be presented as a Late-Breaking Work at ACM CHI 2016, in San Jose, Ca The Extended Abstract describing the project's motivation and design is available at: http://antoineponsard.com/res/PaperQuest.pdf
Running the code
This is a system meant for the web. You need to have a web server that can handle http requests installed. Just copy the directory structure into a folder that is being served by your computer and then point a browser to that URL, no need to configure anything else. If you experience problems we advice you to first check that your folder permissions are set correctly.
Note about the data: the original dataset of HCI papers for this project was provided by Justin Matejka from the Citeology project at Autodesk. The dataset of Information Visualization papers comes from the Visualization Publication Dataset (http://vispubdata.org), from Petra Isenberg, Florian Heimerl, Steffen Koch, Tobias Isenberg, Panpan Xu, Chad Stolper, Michael Sedl- mair, Jian Chen, Torsten Möller, and John Stask.
All third party libraries are in the lib/ folder. The css/ and fonts/ folders contain styles and fonts used by the system, respectively. The scripts/ folder contains some Python scripts that were used to parse scraped data.
The first point of contact with the system is in index.html, and most things happen there. The rest of the files are JS code that implements most of the functionality. It uses D3 (http://d3js.org/) for the majority of the work. The following is a breakdown of how the code is organized, roughly.
algorithm.jscontains the implementation of the relevance algorithm for recommending papers.
geometry.jshas a bunch of helper functions to compute geometry of papers and views in the window.
global.jsdefines the global state object for the system.
main.jsis the script that gets called first, and is in charge of setting up the rest of the vis. It doesn't do anything after that.
papers.jsis an implementation of a paper class in JS that presents an abstraction layer from the dataset to the rest of the code.
sessionManager.jsuses Local Storage to save and restore user sessions.
stats.jscontains helper functionality to render the visualizations in stats.html.
userData.jsmanages the user's dataset, that is papers and other derived attributes relevant to the current user of the system.
helpers.jscontains general functions that are useful in many places, like a function that truncates text at word boundaries.
histogram.jscontains useful code for building histograms.
scatterplot.jsis the same, but for scatterplots.
update.jsis responsible for much of the interaction in the system. It implements the logic for how things should be rendered based on changes in the system's global state. It's code is called frequently to update the visualization and keep it current.
udpateSideViews.jshas similar responsibilities, but only for the sidebar at the right of the vis.
view.jssets down the main SVG components of the interface, draws the bigger elements like side-by-side views, and connects the different listeners to components in the DOM.
parameters.jsis a configuration file with sane defaults for how things should work.