Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Constructiveness in online news comments

Identifying constructive language

News organizations enable online commenting with the goal of increasing user engagement and enhancing the quality of news and information. Unfortunately, online commenting platforms are often used as a place to vent anger, frustration, and express hatred, in general or towards specific groups. While there is a clear value in including reader comments, news organizations find themselves having to sift through and organize comments to ensure that commenters exchange views, opinions, and insights in a respectful and constructive manner, and to keep the discussion relevant to the issues discussed in the article. The goal of this project is to promote meaningful and constructive discussion online. Accordingly, we have developed computational methods to identify constructive comments.

The data for this project is a subset of comments from the SFU Opinion and Comments Corpus. This subset, the Constructive Comments Corpus (C3) consists of 12,000 comments annotated by crowdworkers for constructiveness and its characteristics.

For more information about this work, please see our papers.

Check out the web interface for this project.

Project Organization

├── Makefile           <- Makefile with commands like `make data` or `make train`
├──          <- The top-level README for developers using this project.
├── data
│   ├── external       <- Data from third party sources.
│   ├── interim        <- Intermediate data that has been transformed.
│   ├── processed      <- The final, canonical data sets for modeling.
│   └── raw            <- The original, immutable data dump.
├── models             <- Trained and serialized models, model predictions, or model summaries
├── notebooks          <- Jupyter notebooks. Naming convention is a number (for ordering),
│                         the creator's initials, and a short `-` delimited description, e.g.
│                         `1.0-jqp-initial-data-exploration`.
├── references         <- Data dictionaries, manuals, and all other explanatory materials.
├── reports            <- Generated analysis as HTML, PDF, LaTeX, etc.
│   └── figures        <- Generated graphics and figures to be used in reporting
├── requirements.txt   <- The requirements file for reproducing the analysis environment, e.g.
│                         generated with `pip freeze > requirements.txt`
├──           <- makes project pip installable (pip install -e .) so src can be imported
├── src                <- Source code for use in this project.
│   ├──    <- Makes src a Python module
│   │
│   ├── data           <- Scripts to download or generate data
│   │   └──
│   │   └──
│   │
│   ├── features       <- Scripts to turn raw data into features for modeling
│   │   └──
│   │
│   ├── models         <- Scripts to train models and then use trained models to make
│   │   │                 predictions
│   │   ├──    
│   │   ├──
│   │   └──
│   │
│   └── visualization  <- Scripts to create exploratory and results oriented visualizations
│       └──
└── tox.ini            <- tox file with settings for running tox; see

Project based on the cookiecutter data science project template. #cookiecutterdatascience

How to run the code

  • Clone the repo and cd to your repo dir.
  • Set up environment.
    • Edit .env and add your home path.
    • Set up environment using: source .env
  • Copy the data directory from the Data folder on the drive and put it your repo.
  • Run the models under src/models.


Identifying constructive language in online communication







No releases published


No packages published