Giter Club home page Giter Club logo

parsifal's Introduction

Parsifal logo

Parsifal

Parsifal is a tool to support researchers to perform systematic literature reviews.

Report bug · Blog · Help

Status

codecov code style: black

About

A systematic literature review is a secondary study with the objective to identify, analyze and interpret all available evidence from primary studies related to a specific research question. As suggested by Kitchenham and Charters, the activity to perform a systematic literature review involves planning, conducting, and reporting the review.

Performing a systematic literature review is a labor-intensive task that requires a huge amount of work from the researcher, designing the protocol, adjusting the search string, filtering the results, sometimes more than a thousand articles, selecting those articles that attend the inclusion criteria, and removing those articles that attend the exclude criteria. After that, the researcher might start to analyze the relevant result one by one.

Tech Stack

The project is currently running on the following versions:

  • Python 3.9
  • Django 4.1
  • PostgreSQL 12
  • Bootstrap 3.4
  • jQuery 3.6

Running Locally

To run the project locally first you need to clone the repository:

git clone https://github.com/vitorfs/parsifal.git

Create a virtualenv:

virtualenv venv -p python3

Install the development requirements:

pip install -r requirements/local.txt

Now you should either setup a local PostgreSQL database or use SQLite.

Create a .env file in the project root (you can create one by making a copy of the .env.example):

cp .env.example .env

Now add the DATABASE_URL with the connection string pointing to your local database:

DATABASE_URL=postgres://richardwagner:holygrail@localhost:5432/parsifal

Or for SQLite:

DATABASE_URL=sqlite:////tmp/parsifal.sqlite3

Or if you want to place it elsewhere:

DATABASE_URL=sqlite:////Users/vitor/dev/parsifal/parsifal.sqlite3

Now run the migrations:

python manage.py migrate

Run the local server:

python manage.py runserver

License

The source code is released under the MIT License.

parsifal's People

Contributors

vitorfs avatar wsegatto avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

parsifal's Issues

Planning: implement selection criteria

  • Inclusion criteria
    • Add criteria
    • Remove selected criteria
    • Ajax to add/remove
  • Exclusion criteria
    • Add criteria
    • Remove selected criteria
    • Ajax to add/remove

Use selecion criteria on study selecion phase

Hello, I have a feature enhancement request: to make it possible to select which criteria was used to accept/reject an item during the Study Selection phase.

Thank you so much for creating such an useful tool and making it open source.

Science Direct bibtex import

Hi!
I just found something that might be a bug.
Even when the bibtex generated by Science Direct contains the abstract field, parsifal is not importing it.

SystemExit: 1 build_quality_assessment_table

https://sentry.io/organizations/simple-complex/issues/2637307573/?referrer=github_plugin

SystemExit: 1
(27 additional frame(s) were not displayed)
...
  File "django/db/backends/utils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "django/db/backends/utils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "django/db/backends/utils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "encodings/utf_8.py", line 15, in decode
    def decode(input, errors='strict'):
  File "gunicorn/workers/base.py", line 203, in handle_abort
    sys.exit(1)

mendeley 0.3.2 requires requests==2.5.1, but you'll have requests 2.7.0 which is incompatible.

Description

Trying to install Parsifal on a Nix environment, I get

ERROR: pip's legacy dependency resolver does not consider dependency conflicts when selecting packages. This behaviour is the source of the following dependency conflicts.
mendeley 0.3.2 requires requests==2.5.1, but you'll have requests 2.7.0 which is incompatible.

Reproduce

  1. Install Nix

  2. Get ec84153

  3. Go to directory parsifal

  4. Create file shell.nix

    let
      pkgs = import <nixpkgs> {};
      name = "pip-env";
      venvDir = "./.venv";
    in with pkgs; mkShell rec {
      inherit name venvDir;
    
      buildInputs = [
        python27
        python27Packages.pip
        python27Packages.setuptools
        python27Packages.virtualenv # Needed when using python 2.7
        python27Packages.wheel
        postgresql_9_6
      ];
    
      # This is very close to how venvShellHook is implemented, but
      # adapted to use 'virtualenv'
      shellHook = ''
        SOURCE_DATE_EPOCH=$(date +%s)
    
        if [ -d "${venvDir}" ]; then
          printf "%s\n" "Skipping venv creation, '${venvDir}' already exists"
        else
          printf "%s\n" "Creating new venv environment in path: '${venvDir}'"
          # Note that the module venv was only introduced in python 3, so for 2.7
          # this needs to be replaced with a call to virtualenv
          ${python27Packages.virtualenv}/bin/virtualenv "${venvDir}"
        fi
    
        # Under some circumstances it might be necessary to add your virtual
        # environment to PYTHONPATH, which you can do here too;
        PYTHONPATH=$PWD/${venvDir}/${python27Packages.python.sitePackages}/:$PYTHONPATH
    
        source "${venvDir}/bin/activate"
    
        # As in the previous example, this is optional.
        pip install -r requirements.txt
      '';
    }
    
  5. Run nix-shell --pure --show-trace shell.nix

check code consistence

  • indentation
  • quotation marks on javascript code and python code
  • underscore and hyphen separators

Finish the profile edition

  • Verify e-mail
  • Persist url, location and institution
  • Treat First Name and Last Name as mandatory
  • Upload profile picture. (might want to use Gravatar api like Github)

TypeError: Cannot read properties of undefined (reading 'top')

https://sentry.io/organizations/simple-complex/issues/2635003173/?referrer=github_plugin

TypeError: Cannot read properties of undefined (reading 'top')
  at isScrolledIntoView (/static/CACHE/js/output.71bbdacc56f9.js:119:210)
  at move (/static/CACHE/js/output.71bbdacc56f9.js:124:475)
  at HTMLBodyElement.<anonymous> (/static/CACHE/js/output.71bbdacc56f9.js:122:93)
  at HTMLBodyElement.dispatch (/static/CACHE/js/output.bcc51440e9e2.js:1:52318)
  at HTMLBodyElement.v.handle (/static/CACHE/js/output.bcc51440e9e2.js:1:50302)

Order articles by score

Hi,

It would be very useful to be able to order the list of articles by score, especially during quality assessment and data extraction. That way, one start by reviewing the most important articles, and can even ignore them after certain limit if there are too many articles and little time.

[feature] Collapse articles

Hello,
Could you add a collapse effect in the articles during the data extraction?

For example, all articles are closed or opened (button option), and I can show or hide articles using collapse. This help the articles preview and readability.

TypeError: Cannot read properties of undefined (reading 'forEach')

https://sentry.io/organizations/simple-complex/issues/2635280665/?referrer=github_plugin

TypeError: Cannot read properties of undefined (reading 'forEach')
  at S.fn.init.$.fn.displaySearchResults (/static/js/conducting_search_studies.js:73:36)
  at Object.success (/static/js/conducting_search_studies.js:171:26)
  at c (/static/CACHE/js/output.bcc51440e9e2.js:1:37581)
  at Object.fireWith [as resolveWith] (/static/CACHE/js/output.bcc51440e9e2.js:1:38326)
  at l (/static/CACHE/js/output.bcc51440e9e2.js:1:89155)
...
(1 additional frame(s) were not displayed)

Planning: implement sources

  • Suggested sources
  • Source edit
  • Consider custom source and user source
  • Add a link to the source url
  • Security issues with permissions to add/remove (ajax get method)

Wrong number of imported studies on final report

The number of imported studies on the final report is way off.

Here's the correct data:

  • ACM Digital Library: 2
  • IEEE Digital Library: 5
  • Science@Direct: 47
  • Scopus: 20

And here's the data on the final report docx:

  • ACM Digital Library: 5455
  • IEEE Digital Library: 8267
  • Science@Direct: 6616
  • Scopus: 14488

[feature] Clone a review

Hello,
First, I would like to say that Parsifal is a fantastic tool!

Second, is it possible to add a option to clone a review?
The context is: I have a "big" review abou a topic. From this review, I would like to focus in a specific theme. For example, I done a review about mutation testing, from it I would like focus in search-based algorithms. So, currently I need (again) to create, import, extract, etc. With a "clone" option, I could remove the unnecessary studies and to mantain a specific review.

Is it possible to do a clone option?

Thanks

Quality Assessment is not filtering

The Quality Assessment isn't filtering according with any parameters. The attached image below is a sample when trying to filter by the cutoff score, except that some undone with lower score appears. It is important to notice that they are UNDONE and not checked with the lowest score.
image

Thank you.

Adding labels to studies and filter them by labels and inclusion/exclusion criterias

Hi,

Any thoughts about implementing a label/tag functionality to classify studies, or something similar? I think that would help a lot at the classification step.

Another good thing would be a more filter/sort fields while selecting the studies. For instance with the labels/tags I just suggested, or with the inclusion/exclusion criteria that Parsifal already have.

Thanks and congrats for the project! It's amazing :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.