Description.

This web app recommends Indonesian scientific journals that best fit the user’s scientific paper. The premise is quite simple: the user inputs the abstract for their scientific article, and the application outputs a list of journals ordered descendingly by how similar they are to the article in terms of percentages. It’s able to do this because it utilizes a previously trained Softmax Regression model that’s deployed to the web app.

Softmax Regression is a version of Logistic Regression the switches the Sigmoid function in the output layer with a Softmax function. To put it simply, while a Logistic Regression model classifies the input data dichotomously (yes or no; cat or dog) with a 100% certainty, a Softmax Regression model classifies the input data multinomially (yes, no, or maybe; cat, dog, mouse, or bird) with differing percentages for each class. The model is trained on a dataset that was scraped from SINTA and Garuda using a web scraper that I built in conjunction with this web app, and the features of the dataset were selected using a Chi-Square feature selection program that I also built.

Here is the link for the Github repository and here is the link for the demo of the app. The demo could be slow to start because I deployed it to the free version of Heroku and it takes time for the dyno to spin up if it hasn’t been used in a while.

Background.

This is a project for my Bachelor’s thesis. The idea came up when I was casually browsing the internet to find journals that I could use as inspiration for my thesis. I came across a feature from Elsevier that allows researchers to find the best journals that fit their scientific papers. After searching whether or not there was an Indonesian counterpart available online (which there wasn’t at that time), and knowing that my major’s specialization was Artificial Intelligence, I ended up doing this project.

Features.

  • Utilizes a trained Softmax Regression model and Chi-Square feature selection.
  • Outputs journal recommendations in the form of probabilities.
  • Recommends journal with the highest probability as the main recommendation and outputs a summary and a link for said recommended journal.
  • Works properly only with Indonesian abstracts.
  • Only allows abstracts that consist of 100 - 350 words as input.
  • Recommends 12 different journals:
No. Name Scope of Knowledge
1. Jurnal Hortikultura Horticulture
2. Jurnal Penelitian Perikanan Indonesia Fisheries
3. Jurnal Riset Akuakultur Aquaculture
4. Jurnal Jalan-Jembatan Road Construction
5. Jurnal Penelitian Hasil Hutan Forestries
6. Jurnal Penelitian Hutan dan Konservasi Alam Forest Conservation
7. E-Jurnal Medika Udayana Medical Sciences
8. Jurnal Simetris Technology
9. Jurnal Teknik ITS Technology
10. Berita Kedokteran Masyarakat Public Health
12. Indonesia Medicus Veterinus Veterinary
13. Matriks Teknik Sipil Civil Engineering

Tools.

How to Configure in Local Environment.

After cloning the repository, do the following steps:

  1. Create a virtual environment in the cloned dir.

    $ python3 -m venv venv
    
  2. Activate the virtual environment/.

    $ source venv/bin/activate
    
  3. Install all the dependencies listed in requirements.txt.

    $ pip install -r requirements.txt
    
  4. Setup the flask environment variable in .env.

    SECRET_KEY=your_secret_key
    ABSTRACT_TOKEN_SAVE_DIR=./data/output/abstract-token-list.json
    TF_IDF_SAVE_DIR=./data/output/tf-idf.csv
    FV_TOKENS_OPEN_DIR=./data/fv-tokens
    JOURNAL_DATA_OPEN_DIR=./static/journal_info
    
  5. Deactivate and reactivate the virtual environment.

    $ deactivate
    $ source venv/bin/activate
    

How to Run in Local Environment.

After configuring it locally, do the following steps every time you want to run the app:

  1. Activate the virtual environment.

    $ source venv/bin/activate
    
  2. Export the shell environment variables.

    $ export FLASK_APP=server.py
    $ export FLASK_ENV=development
    
  3. Run the app.

    $ flask run
    

Demo.

  • Input validation

  • Recommendation result