
# Cofacts Archive for Reported Messages and Crowd-Sourced Fact-Check Replies

[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1qdE-OMJTi6ZO68J6KdzGdxNdheW4ct6T?usp=sharing)

The Cofacts dataset encompasses instant messages that have been reported by users of the [Cofacts chatbot](https://line.me/R/ti/p/@cofacts) and the replies provided by the [Cofacts crowd-sourced fact-checking community](https://www.facebook.com/groups/cofacts/).

## Attribution to the Community

This dataset is a result of contributions from both Cofacts LINE chatbot users and the community fact checkers.
To appropriately attribute their efforts, please adhere to the rules outlined in the [Cofacts 真的假的 資料使用者條款 (Cofacts Data User Agreement)](https://github.com/cofacts/opendata/blob/master/LEGAL.md).

Unless stated otherwise, when redistributing Cofacts data outside the LINE application, the attribution specified by the Cofacts Working Group is as follows:

> This data by Cofacts message reporting chatbot and crowd-sourced fact-checking community is licensed under CC BY-SA 4.0. To provide more info, please visit Cofacts LINE bot https://line.me/ti/p/@cofacts

除非以其他方式議定，否則 Cofacts 真的假的工作小組，針對在 LINE 之外的地方散布的 Cofacts 所提供資料，所指定的中文顯名聲明為：

> 本編輯資料取自「Cofacts 真的假的」訊息回報機器人與查證協作社群，採 CC BY-SA 4.0 授權提供。若欲補充資訊請訪問 Cofacts LINE bot https://line.me/ti/p/@cofacts

For more detailed information, please refer to [Cofacts 真的假的 資料使用者條款](https://github.com/cofacts/opendata/blob/master/LEGAL.md).

## How to Access Cofacts Data

To access Cofacts data, you should first register on Hugging Face and accept the Cofacts Data User Agreement. Afterward, you can preview the data on the Hugging Face website.

You can access Cofacts data through the following methods:

1. Load `cofacts/line-msg-fact-check-tw` with Hugging Face's `load_dataset('Cofacts/line-msg-fact-check-tw', TABLE_NAME)`.
2. Download individual zipped CSV files in the `Files` tab on the Hugging Face website.

If you plan to process the data using Python, `load_dataset()` is the simpler solution.
Please refer to [Example on Google Colab](https://colab.research.google.com/drive/1qdE-OMJTi6ZO68J6KdzGdxNdheW4ct6T?usp=sharing) to get started.

## Data Formats

Cofacts data comprises multiple normalized tables, with some tables containing foreign keys to other tables' IDs.

If you have manually downloaded the data, the tables are distributed as zipped CSV files. These files use `\n` as the line terminator, and quotes are used around multi-line contents.
The [`csv-stringify`](https://www.npmjs.com/package/csv-stringify) library is employed to perform escaping and handle quotes and multi-line contents.

### Fields in All Tables

* `userIdsha` (string) Hashed user identifier.
* `appId` (string) Possible values include:
    * `LEGACY_APP`: Articles collected before 2017-03.
    * `RUMORS_LINE_BOT`: Articles collected with the current LINE bot client after 2017-03.

These two fields together uniquely identify a user across different CSV files. For example, if one row (reply) in `replies.csv` and another row (feedback) in `article_reply_feedbacks.csv` have identical `userIdsha` and `appId`, it indicates that the reply and the feedback were submitted by the same user.

Also, these fields are commonly seen in multiple tables:
* `status`: The current visibility of this document. Possible values include:
    * `NORMAL`: The document is normally visible.
    * `DELETED`: The document is deleted by its author. For some entities (tables), deletion is not implemented, and thus does not have such value.
    * `BLOCKED`: The document is hidden by Cofacts Working Group. These document are from a blocked user, with `blockedReason` pointing to announcements in [Cofacts Takedown Announcements](https://github.com/cofacts/takedowns).

## Tables and their fields

### `articles`

The instant messages LINE bot users submitted into the database.

| Field            | Data type | Description |
| ----------------------- | -------- | ---- |
| `id`                      | String     |  |
| `articleType`             | Enum string     | `TEXT`, `IMAGE`, `VIDEO` or `AUDIO`. |
| `status`                  | Enum string     | `NORMAL` or `BLOCKED`. |
| `text`                    | Text     | The instant message text |
| `normalArticleReplyCount` | Integer     | The number of replies are associated to this article, excluding the deleted reply associations. |
| `createdAt`               | ISO time string     | When the article is submitted to the database. |
| `updatedAt`               | ISO time string     | Preserved, currently identical to `createdAt` |
| `lastRequestedAt`         | ISO time string     | The submission time of the last `reply_request` is sent on the article, before the article is replied.  |
| `userIdsha256`               | String     | Author of the article.|
| `appId`                   | String     |  |
| `references`              | Enum string     | Where the message is from. Currently the only possible value is `LINE`. |

### `article_hyperlinks`

Parsed hyperlink contents in each instant messages, parsed using [cofacts/url-resolver](https://github.com/cofacts/url-resolver/).
The data is used in Cofacts system for indexing and retrieving messages.

| Field            | Data type | Description |
| ---------------- | -------- | ---- |
| `articleId`      | String     |                                    |
| `url`            | String     | The URL string detected in article |
| `normalizedUrl`  | String     | Canonical URL after normalization process including unfolding shortened URLs |
| `title`          | String     | Title of the scrapped web content |

Note: Scrapped contents do not belong to Cofacts and are redistributed under research purposes.
The scrapping mechanism is not reliable either.
Researchers may need to implement their own scrapper if content is important in their research.

### `article_categories`

Categories linked to this article.

| Field            | Data type  | Description |
| ---------------- | ---------- | ---- |
| `articleId`      | String     |                                    |
| `categoryId`     | String     |
| `aiConfidence`   | Number     | Confidence level by AI marking this category. Empty for crowd-sourced labels. |
| `aiModel` .      | String     | Name of the AI model marking this cateogry. Empty for crowd-sourced labels. |
| `userIdsha256`   | String     | The person that connected article and category. |
| `appId` .        | String     |  |
| `negativeFeedbackCount` | Integer     | Number of `article_category_feedbacks` that has score `-1` |
| `positiveFeedbackCount` | Integer     | Number of `article_category_feedbacks` that has score `1` |
| `status`                | Enum string     | `NORMAL`: The category and article are connected. `DELETED`: The category does not connect to the article anymore. |
| `createdAt`      | ISO time string     | The time when the reply is connected to the article |
| `updatedAt`             | ISO time string     | The latest date when the category's status is updated |

### `categories`

| Field         | Data type | Description |
| ------------- | --------- | ----------- |
| `id`          | String    |             |
| `title`       | String    | Name of the category |
| `description` | Text      | Definition of the category |
| `createdAt`   | ISO time string     |   |
| `updatedAt`   | ISO time string     |   |

### `article_replies`

Articles and replies are in has-and-belongs-to-many relationship. That is, an article can have multiple replies, and a reply can be connected to multiple similar articles.

`article_replies` is the "join table" between `articles` and `replies`, bringing `articleId` and `replyId` together, along with other useful properties related to this connection between an article and a reply.

One pair of `articleId`, `replyId` will map to exactly one `article_reply`.


| Field            | Data type | Description |
| --------------------- | -------- | - |
| `articleId`             | String     | Relates to `id` field of `articles` |
| `replyId`               | String     | Relates to `id` field of `replies` |
| `userId`                | String     | The user connecting the reply with the article |
| `negativeFeedbackCount` | Integer     | Number of `article_reply_feedbacks` that has score `-1` |
| `positiveFeedbackCount` | Integer     | Number of `article_reply_feedbacks` that has score `1` |
| `replyType`             | Enum string     | Duplicated from `replies`'s type. |
| `appId`                 | String     | |
| `status`                | Enum string     | `NORMAL`: The reply and article are connected. `DELETED`: The reply does not connect to the article anymore. `BLOCKED`: It comes from a blocked user. |
| `createdAt`             | ISO time string     | The time when the reply is connected to the article |
| `updatedAt`             | ISO time string     | The latest date when the reply's status is updated |


### `replies`

Editor's reply to the article.

| Field            | Data type | Description |
| --------- | -------- | - |
| `id`        | String     | |
| `type`      | Enum string     | Type of the reply chosen by the editor. `RUMOR`: The article contains rumor. `NOT_RUMOR`: The article contains fact. `OPINIONATED`: The article contains personal opinions. `NOT_ARTICLE`: The article should not be processed by Cofacts. |
| `reference` | Text     | For `RUMOR` and `NOT_RUMOR` replies: The reference to support the chosen `type` and `text`. For `OPINIONATED` replies: References containing different perspectives from the `article`. For `NOT_ARTICLE`: empty string. |
| `userId`    | String     | The editor that authored this reply. |
| `appId`     | String     | |
| `text`      | Text     | Reply text writtern by the editor |
| `createdAt` | ISO Time string     | When the reply is written |

### `reply_hyperlinks`

Parsed hyperlink contents in reply text and references, parsed using [cofacts/url-resolver](https://github.com/cofacts/url-resolver/).
The data is used in Cofacts system for URL previews.

| Field            | Data type | Description |
| ---------------- | -------- | ---- |
| `replyId`      | String     |                                    |
| `url`            | String     | The URL string detected in article |
| `normalizedUrl`  | String     | Canonical URL after normalization process including unfolding shortened URLs |
| `title`          | String     | Title of the scrapped web content |

Note: Scrapped contents do not belong to Cofacts and are redistributed under research purposes.
The scrapping mechanism implementation is not reliable either.
Researchers may need to implement their own scrapper if content is important in their research.

### `reply_requests`

Before an article is replied, users may submit  `reply_requests` to indicate that they want this article to be answered.

When an article is first submitted to the article, an reply request is also created. Any further queries to the same article submits new `reply_requests`.

An user can only submit one reply request to an article.

| Field            | Data type | Description |
| --------- | -------- | - |
| `articleId`        | String     | The target of the request |
| `reason`        | Text     | The reason why the user wants to submit this reply request |
| `status`                  | Enum string     | `NORMAL` or `BLOCKED`. |
| `positiveFeedbackCount`        | Text     | Number of editors think the reason is reasonable |
| `negativeFeedbackCount`        | Text     | Number of editors think the reason is nonsense |
| `createdAt` | ISO Time string     | When the reply request is issued |

### `article_reply_feedbacks`

Editors and LINE bot users can express if a reply is useful by submitting `article_reply_feedbacks` toward a `article_reply` with score `1` or `-1`.

The feedback is actually submitted toward an `article_reply`, the connection between an article and a reply. This is because a reply can be connected to multiple articles. A reply that makes sense in one article does not necessarily mean that it is useful in answering another article. Therefore, the feedback count for a reply connecting to different articles are counted separately.

| Field            | Data type | Description |
| --------- | -------- | - |
| `articleId`        | String     | Relates to `articleId` of the target `article_reply` |
| `replyId`        | String     | Relates to `replyId` of the target `article_reply` |
| `score`        | Integer     | `1`: Useful. `-1`: Not useful. |
| `comment`        | Text     | Why the user chooses such score for this article reply |
| `status`                  | Enum string     | `NORMAL` or `BLOCKED`. |
| `createdAt` | ISO Time string     | When the feedback is submitted |

### `analytics`

Usage (visit / show) statistics of website and Cofacts LINE bot.

LINE bot data starts from April 2nd, 2018; website data starts from May 3rd, 2017.

| Field       | Data type       | Description |
| ----------- | --------------- | ----------- |
| `type`      | Enum string     | Either `article` or `reply` |
| `docId`     | String          | Article ID or Reply ID that is being visited / shown |
| `date`      | ISO Time string | The date of usage, represented by start of the day (0:00:00+08:00) |
| `lineUser`  | Integer         | The number of LINE users who inspected this article / reply in Cofacts LINE bot in this date. May be empty if no such users |
| `lineVisit` | Integer         | The number of times this article / reply is inspected in Cofacts LINE bot in this date. May be empty if no visits |
| `webUser`   | Integer         | The number of web users who visited this article page (`/article/<docId>`) / reply page (`/reply/<docId>`) in Cofacts website in this date. May be empty if no such users |
| `webVisit`  | Integer         | The number of page views of this article page (`/article/<docId>`) / reply page (`/reply/<docId>`) in Cofacts website in this date. May be empty if no page views |

### `anonymized_usrs`

The users of Cofacts, including Cofacts chatbot and website users.

| Field       | Data type       | Description |
| ----------- | --------------- | ----------- |
| `userIdsha256` | String       | The ID that is used in other tables to denote the creator of the entity. |
| `appId`     | String          | Where this user account is registered. `RUMORS_LINE_BOT` is Cofacts official LINE account. Registered user on Cofacts website has empty `appId`. |
| `createdAt` | ISO Time string | The initial registration date for the user. |
| `lastActiveAt`      | ISO Time string | The last date the account is active. |
| `blockedReason`     | String | If exists, all submission from the user is hidden by Cofacts WG. This field contains the announcement to the reason why Cofacts WG blocks such user. |

## ⚠ [NOTICE] Caveats of using this data ⚠

The methodology we use to collect these data (i.e. [how Cofacts works](https://beta.hackfoldr.org/cofacts/https%253A%252F%252Fhackmd.io%252Fs%252FBJSdbUMpZ))
could have some impact on the data credibility.

![How cofacts work](https://i.imgur.com/e3Awc50.png)

Please keep in mind that all data in this dataset are user-generated,
thus is not free from noise and sampling bias coming from these sources:
- The distribution Cofacts' users may not reflect the real distribution of all LINE users in Taiwan.
- Users may not use Cofacts in the same way we want them to be.
  Some `articles` may not be actual messages circulating in LINE network.
- `replies` may contain factual error.
  All replies should be merely regarded as "responses to the original message (`article`) to provide different point of view".
  They are neither the "truth" nor the editor's personal opinion.
- There may also exist malicious users sending garbage `articles` into the database. [(Previous incident reports)](https://hackmd.io/@cofacts/incidents)
- The program to collect data and to generate dataset may contain error.
  The dataset may be inaccurate systematically in this way.

Lastly, the dataset is provided without warrenty.

THE DATASET IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE DATASET OR THE USE OR OTHER DEALINGS IN THE DATASET.
task_categories:text-classification task_categories:question-answering size_categories:100K<n<1M language:zh license:cc-by-sa-4.0 fact-checking crowd-sourcing region:us
{"language": ["zh"], "license": "cc-by-sa-4.0", "size_categories": ["100K<n<1M"], "task_categories": ["text-classification", "question-answering"], "pretty_name": "Cofacts archive for reported messages and crowd-sourced fact-check replies", "tags": ["fact-checking", "crowd-sourcing"], "extra_gated_prompt": "To access this repository, you agree to follow the [Cofacts Data User Agreement](https://github.com/cofacts/opendata/blob/master/LEGAL.md). This is vital to sustain a crowd-sourced database like Cofacts to attribute the fact-checking community that contributed to this dataset.\n\u6b32\u5b58\u53d6\u6b64\u8cc7\u6599\u96c6\uff0c\u9700\u540c\u610f[Cofacts \u771f\u7684\u5047\u7684 \u8cc7\u6599\u4f7f\u7528\u8005\u689d\u6b3e](https://github.com/cofacts/opendata/blob/master/LEGAL.md)\u3002 \u5f70\u986f\u67e5\u6838\u793e\u7fa4\u5c0d\u6b64\u8cc7\u6599\u96c6\u4e4b\u8ca2\u737b\uff0c\u5c0d\u5354\u4f5c\u578b\u8cc7\u6599\u5eab\u5982 Cofacts \u7684\u6c38\u7e8c\u767c\u5c55\u81f3\u95dc\u91cd\u8981\u3002\nIt would be great if you share with us who you are and your planned usage of the Cofacts data. Your cooperation is greatly appreciated. If you have no specific details to share with us, please simply enter \"n/a.\"\n\u82e5\u65b9\u4fbf\u7684\u8a71\uff0c\u5e0c\u671b\u60a8\u53ef\u4ee5\u8207 Cofacts \u5de5\u4f5c\u5c0f\u7d44\u5206\u4eab\u60a8\u7684\u55ae\u4f4d\u4ee5\u53ca\u9810\u8a08\u6703\u600e\u9ebc\u904b\u7528\u9019\u500b\u8cc7\u6599\uff0c\u611f\u8b1d\u60a8\uff01\u82e5\u4e0d\u65b9\u4fbf\uff0c\u53ef\u8f38\u5165\u300cn/a\u300d\u3002", "extra_gated_fields": {"I agree to follow the Data User Agreement and promise to attribute Cofacts as specified \u6211\u540c\u610f\u9075\u5b88\u8cc7\u6599\u4f7f\u7528\u8005\u689d\u6b3e\u4e26\u627f\u8afe\u6309\u898f\u5b9a\u5f70\u986f Cofacts": "checkbox", "Anything to share with us \u6709\u4ec0\u9ebc\u60f3\u8981\u8207\u6211\u5011\u5206\u4eab\u7684\u55ce": "text"}, "configs": [{"config_name": "analytics", "data_files": "analytics.csv.zip"}, {"config_name": "article_categories", "data_files": "article_categories.csv.zip"}, {"config_name": "article_hyperlinks", "data_files": "article_hyperlinks.csv.zip", "lineterminator": "\n"}, {"config_name": "article_replies", "data_files": "article_replies.csv.zip"}, {"config_name": "article_reply_feedbacks", "data_files": "article_reply_feedbacks.csv.zip", "lineterminator": "\n"}, {"config_name": "articles", "data_files": "articles.csv.zip", "lineterminator": "\n", "default": true}, {"config_name": "categories", "data_files": "categories.csv.zip", "lineterminator": "\n"}, {"config_name": "replies", "data_files": "replies.csv.zip", "lineterminator": "\n"}, {"config_name": "reply_hyperlinks", "data_files": "reply_hyperlinks.csv.zip", "lineterminator": "\n"}, {"config_name": "reply_requests", "data_files": "reply_requests.csv.zip", "lineterminator": "\n"}, {"config_name": "anonymized_users", "data_files": "anonymized_users.csv.zip", "lineterminator": "\n"}]}
TAGS
#task_categories-text-classification #task_categories-question-answering #size_categories-100K<n<1M #language-Chinese #license-cc-by-sa-4.0 #fact-checking #crowd-sourcing #region-us 

Cofacts Archive for Reported Messages and Crowd-Sourced Fact-Check Replies
==========================================================================


![Open In Colab](URL


The Cofacts dataset encompasses instant messages that have been reported by users of the Cofacts chatbot and the replies provided by the Cofacts crowd-sourced fact-checking community.


Attribution to the Community
----------------------------


This dataset is a result of contributions from both Cofacts LINE chatbot users and the community fact checkers.
To appropriately attribute their efforts, please adhere to the rules outlined in the Cofacts 真的假的 資料使用者條款 (Cofacts Data User Agreement).


Unless stated otherwise, when redistributing Cofacts data outside the LINE application, the attribution specified by the Cofacts Working Group is as follows:



> 
> This data by Cofacts message reporting chatbot and crowd-sourced fact-checking community is licensed under CC BY-SA 4.0. To provide more info, please visit Cofacts LINE bot URL
> 
> 
> 


除非以其他方式議定，否則 Cofacts 真的假的工作小組，針對在 LINE 之外的地方散布的 Cofacts 所提供資料，所指定的中文顯名聲明為：



> 
> 本編輯資料取自「Cofacts 真的假的」訊息回報機器人與查證協作社群，採 CC BY-SA 4.0 授權提供。若欲補充資訊請訪問 Cofacts LINE bot URL
> 
> 
> 


For more detailed information, please refer to Cofacts 真的假的 資料使用者條款.


How to Access Cofacts Data
--------------------------


To access Cofacts data, you should first register on Hugging Face and accept the Cofacts Data User Agreement. Afterward, you can preview the data on the Hugging Face website.


You can access Cofacts data through the following methods:


1. Load 'cofacts/line-msg-fact-check-tw' with Hugging Face's 'load\_dataset('Cofacts/line-msg-fact-check-tw', TABLE\_NAME)'.
2. Download individual zipped CSV files in the 'Files' tab on the Hugging Face website.


If you plan to process the data using Python, 'load\_dataset()' is the simpler solution.
Please refer to Example on Google Colab to get started.


Data Formats
------------


Cofacts data comprises multiple normalized tables, with some tables containing foreign keys to other tables' IDs.


If you have manually downloaded the data, the tables are distributed as zipped CSV files. These files use '\n' as the line terminator, and quotes are used around multi-line contents.
The 'csv-stringify' library is employed to perform escaping and handle quotes and multi-line contents.


### Fields in All Tables


* 'userIdsha' (string) Hashed user identifier.
* 'appId' (string) Possible values include:
	+ 'LEGACY\_APP': Articles collected before 2017-03.
	+ 'RUMORS\_LINE\_BOT': Articles collected with the current LINE bot client after 2017-03.


These two fields together uniquely identify a user across different CSV files. For example, if one row (reply) in 'URL' and another row (feedback) in 'article\_reply\_feedbacks.csv' have identical 'userIdsha' and 'appId', it indicates that the reply and the feedback were submitted by the same user.


Also, these fields are commonly seen in multiple tables:


* 'status': The current visibility of this document. Possible values include:
	+ 'NORMAL': The document is normally visible.
	+ 'DELETED': The document is deleted by its author. For some entities (tables), deletion is not implemented, and thus does not have such value.
	+ 'BLOCKED': The document is hidden by Cofacts Working Group. These document are from a blocked user, with 'blockedReason' pointing to announcements in Cofacts Takedown Announcements.


Tables and their fields
-----------------------


### 'articles'


The instant messages LINE bot users submitted into the database.


Field: 'id', Data type: String, Description: 
Field: 'articleType', Data type: Enum string, Description: 'TEXT', 'IMAGE', 'VIDEO' or 'AUDIO'.
Field: 'status', Data type: Enum string, Description: 'NORMAL' or 'BLOCKED'.
Field: 'text', Data type: Text, Description: The instant message text
Field: 'normalArticleReplyCount', Data type: Integer, Description: The number of replies are associated to this article, excluding the deleted reply associations.
Field: 'createdAt', Data type: ISO time string, Description: When the article is submitted to the database.
Field: 'updatedAt', Data type: ISO time string, Description: Preserved, currently identical to 'createdAt'
Field: 'lastRequestedAt', Data type: ISO time string, Description: The submission time of the last 'reply\_request' is sent on the article, before the article is replied.
Field: 'userIdsha256', Data type: String, Description: Author of the article.
Field: 'appId', Data type: String, Description: 
Field: 'references', Data type: Enum string, Description: Where the message is from. Currently the only possible value is 'LINE'.


### 'article\_hyperlinks'


Parsed hyperlink contents in each instant messages, parsed using cofacts/url-resolver.
The data is used in Cofacts system for indexing and retrieving messages.


Field: 'articleId', Data type: String, Description: 
Field: 'url', Data type: String, Description: The URL string detected in article
Field: 'normalizedUrl', Data type: String, Description: Canonical URL after normalization process including unfolding shortened URLs
Field: 'title', Data type: String, Description: Title of the scrapped web content


Note: Scrapped contents do not belong to Cofacts and are redistributed under research purposes.
The scrapping mechanism is not reliable either.
Researchers may need to implement their own scrapper if content is important in their research.


### 'article\_categories'


Categories linked to this article.


Field: 'articleId', Data type: String, Description: 
Field: 'categoryId', Data type: String, Description: 
Field: 'aiConfidence', Data type: Number, Description: Confidence level by AI marking this category. Empty for crowd-sourced labels.
Field: 'aiModel' ., Data type: String, Description: Name of the AI model marking this cateogry. Empty for crowd-sourced labels.
Field: 'userIdsha256', Data type: String, Description: The person that connected article and category.
Field: 'appId' ., Data type: String, Description: 
Field: 'negativeFeedbackCount', Data type: Integer, Description: Number of 'article\_category\_feedbacks' that has score '-1'
Field: 'positiveFeedbackCount', Data type: Integer, Description: Number of 'article\_category\_feedbacks' that has score '1'
Field: 'status', Data type: Enum string, Description: 'NORMAL': The category and article are connected. 'DELETED': The category does not connect to the article anymore.
Field: 'createdAt', Data type: ISO time string, Description: The time when the reply is connected to the article
Field: 'updatedAt', Data type: ISO time string, Description: The latest date when the category's status is updated


### 'categories'


Field: 'id', Data type: String, Description: 
Field: 'title', Data type: String, Description: Name of the category
Field: 'description', Data type: Text, Description: Definition of the category
Field: 'createdAt', Data type: ISO time string, Description: 
Field: 'updatedAt', Data type: ISO time string, Description: 


### 'article\_replies'


Articles and replies are in has-and-belongs-to-many relationship. That is, an article can have multiple replies, and a reply can be connected to multiple similar articles.


'article\_replies' is the "join table" between 'articles' and 'replies', bringing 'articleId' and 'replyId' together, along with other useful properties related to this connection between an article and a reply.


One pair of 'articleId', 'replyId' will map to exactly one 'article\_reply'.


Field: 'articleId', Data type: String, Description: Relates to 'id' field of 'articles'
Field: 'replyId', Data type: String, Description: Relates to 'id' field of 'replies'
Field: 'userId', Data type: String, Description: The user connecting the reply with the article
Field: 'negativeFeedbackCount', Data type: Integer, Description: Number of 'article\_reply\_feedbacks' that has score '-1'
Field: 'positiveFeedbackCount', Data type: Integer, Description: Number of 'article\_reply\_feedbacks' that has score '1'
Field: 'replyType', Data type: Enum string, Description: Duplicated from 'replies''s type.
Field: 'appId', Data type: String, Description: 
Field: 'status', Data type: Enum string, Description: 'NORMAL': The reply and article are connected. 'DELETED': The reply does not connect to the article anymore. 'BLOCKED': It comes from a blocked user.
Field: 'createdAt', Data type: ISO time string, Description: The time when the reply is connected to the article
Field: 'updatedAt', Data type: ISO time string, Description: The latest date when the reply's status is updated


### 'replies'


Editor's reply to the article.


Field: 'id', Data type: String, Description: 
Field: 'type', Data type: Enum string, Description: Type of the reply chosen by the editor. 'RUMOR': The article contains rumor. 'NOT\_RUMOR': The article contains fact. 'OPINIONATED': The article contains personal opinions. 'NOT\_ARTICLE': The article should not be processed by Cofacts.
Field: 'reference', Data type: Text, Description: For 'RUMOR' and 'NOT\_RUMOR' replies: The reference to support the chosen 'type' and 'text'. For 'OPINIONATED' replies: References containing different perspectives from the 'article'. For 'NOT\_ARTICLE': empty string.
Field: 'userId', Data type: String, Description: The editor that authored this reply.
Field: 'appId', Data type: String, Description: 
Field: 'text', Data type: Text, Description: Reply text writtern by the editor
Field: 'createdAt', Data type: ISO Time string, Description: When the reply is written


### 'reply\_hyperlinks'


Parsed hyperlink contents in reply text and references, parsed using cofacts/url-resolver.
The data is used in Cofacts system for URL previews.


Field: 'replyId', Data type: String, Description: 
Field: 'url', Data type: String, Description: The URL string detected in article
Field: 'normalizedUrl', Data type: String, Description: Canonical URL after normalization process including unfolding shortened URLs
Field: 'title', Data type: String, Description: Title of the scrapped web content


Note: Scrapped contents do not belong to Cofacts and are redistributed under research purposes.
The scrapping mechanism implementation is not reliable either.
Researchers may need to implement their own scrapper if content is important in their research.


### 'reply\_requests'


Before an article is replied, users may submit 'reply\_requests' to indicate that they want this article to be answered.


When an article is first submitted to the article, an reply request is also created. Any further queries to the same article submits new 'reply\_requests'.


An user can only submit one reply request to an article.


Field: 'articleId', Data type: String, Description: The target of the request
Field: 'reason', Data type: Text, Description: The reason why the user wants to submit this reply request
Field: 'status', Data type: Enum string, Description: 'NORMAL' or 'BLOCKED'.
Field: 'positiveFeedbackCount', Data type: Text, Description: Number of editors think the reason is reasonable
Field: 'negativeFeedbackCount', Data type: Text, Description: Number of editors think the reason is nonsense
Field: 'createdAt', Data type: ISO Time string, Description: When the reply request is issued


### 'article\_reply\_feedbacks'


Editors and LINE bot users can express if a reply is useful by submitting 'article\_reply\_feedbacks' toward a 'article\_reply' with score '1' or '-1'.


The feedback is actually submitted toward an 'article\_reply', the connection between an article and a reply. This is because a reply can be connected to multiple articles. A reply that makes sense in one article does not necessarily mean that it is useful in answering another article. Therefore, the feedback count for a reply connecting to different articles are counted separately.


Field: 'articleId', Data type: String, Description: Relates to 'articleId' of the target 'article\_reply'
Field: 'replyId', Data type: String, Description: Relates to 'replyId' of the target 'article\_reply'
Field: 'score', Data type: Integer, Description: '1': Useful. '-1': Not useful.
Field: 'comment', Data type: Text, Description: Why the user chooses such score for this article reply
Field: 'status', Data type: Enum string, Description: 'NORMAL' or 'BLOCKED'.
Field: 'createdAt', Data type: ISO Time string, Description: When the feedback is submitted


### 'analytics'


Usage (visit / show) statistics of website and Cofacts LINE bot.


LINE bot data starts from April 2nd, 2018; website data starts from May 3rd, 2017.


Field: 'type', Data type: Enum string, Description: Either 'article' or 'reply'
Field: 'docId', Data type: String, Description: Article ID or Reply ID that is being visited / shown
Field: 'date', Data type: ISO Time string, Description: The date of usage, represented by start of the day (0:00:00+08:00)
Field: 'lineUser', Data type: Integer, Description: The number of LINE users who inspected this article / reply in Cofacts LINE bot in this date. May be empty if no such users
Field: 'lineVisit', Data type: Integer, Description: The number of times this article / reply is inspected in Cofacts LINE bot in this date. May be empty if no visits
Field: 'webUser', Data type: Integer, Description: The number of web users who visited this article page ('/article/') / reply page ('/reply/') in Cofacts website in this date. May be empty if no such users
Field: 'webVisit', Data type: Integer, Description: The number of page views of this article page ('/article/') / reply page ('/reply/') in Cofacts website in this date. May be empty if no page views


### 'anonymized\_usrs'


The users of Cofacts, including Cofacts chatbot and website users.


Field: 'userIdsha256', Data type: String, Description: The ID that is used in other tables to denote the creator of the entity.
Field: 'appId', Data type: String, Description: Where this user account is registered. 'RUMORS\_LINE\_BOT' is Cofacts official LINE account. Registered user on Cofacts website has empty 'appId'.
Field: 'createdAt', Data type: ISO Time string, Description: The initial registration date for the user.
Field: 'lastActiveAt', Data type: ISO Time string, Description: The last date the account is active.
Field: 'blockedReason', Data type: String, Description: If exists, all submission from the user is hidden by Cofacts WG. This field contains the announcement to the reason why Cofacts WG blocks such user.


[NOTICE] Caveats of using this data
-----------------------------------


The methodology we use to collect these data (i.e. how Cofacts works)
could have some impact on the data credibility.


!How cofacts work


Please keep in mind that all data in this dataset are user-generated,
thus is not free from noise and sampling bias coming from these sources:


* The distribution Cofacts' users may not reflect the real distribution of all LINE users in Taiwan.
* Users may not use Cofacts in the same way we want them to be.
Some 'articles' may not be actual messages circulating in LINE network.
* 'replies' may contain factual error.
All replies should be merely regarded as "responses to the original message ('article') to provide different point of view".
They are neither the "truth" nor the editor's personal opinion.
* There may also exist malicious users sending garbage 'articles' into the database. (Previous incident reports)
* The program to collect data and to generate dataset may contain error.
The dataset may be inaccurate systematically in this way.


Lastly, the dataset is provided without warrenty.


THE DATASET IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE DATASET OR THE USE OR OTHER DEALINGS IN THE DATASET.



### Fields in All Tables


* 'userIdsha' (string) Hashed user identifier.
* 'appId' (string) Possible values include:
	+ 'LEGACY\_APP': Articles collected before 2017-03.
	+ 'RUMORS\_LINE\_BOT': Articles collected with the current LINE bot client after 2017-03.


These two fields together uniquely identify a user across different CSV files. For example, if one row (reply) in 'URL' and another row (feedback) in 'article\_reply\_feedbacks.csv' have identical 'userIdsha' and 'appId', it indicates that the reply and the feedback were submitted by the same user.


Also, these fields are commonly seen in multiple tables:


* 'status': The current visibility of this document. Possible values include:
	+ 'NORMAL': The document is normally visible.
	+ 'DELETED': The document is deleted by its author. For some entities (tables), deletion is not implemented, and thus does not have such value.
	+ 'BLOCKED': The document is hidden by Cofacts Working Group. These document are from a blocked user, with 'blockedReason' pointing to announcements in Cofacts Takedown Announcements.


Tables and their fields
----------------------- ### 'articles'


The instant messages LINE bot users submitted into the database.


Field: 'id', Data type: String, Description: 
Field: 'articleType', Data type: Enum string, Description: 'TEXT', 'IMAGE', 'VIDEO' or 'AUDIO'.
Field: 'status', Data type: Enum string, Description: 'NORMAL' or 'BLOCKED'.
Field: 'text', Data type: Text, Description: The instant message text
Field: 'normalArticleReplyCount', Data type: Integer, Description: The number of replies are associated to this article, excluding the deleted reply associations.
Field: 'createdAt', Data type: ISO time string, Description: When the article is submitted to the database.
Field: 'updatedAt', Data type: ISO time string, Description: Preserved, currently identical to 'createdAt'
Field: 'lastRequestedAt', Data type: ISO time string, Description: The submission time of the last 'reply\_request' is sent on the article, before the article is replied.
Field: 'userIdsha256', Data type: String, Description: Author of the article.
Field: 'appId', Data type: String, Description: 
Field: 'references', Data type: Enum string, Description: Where the message is from. Currently the only possible value is 'LINE'. ### 'article\_hyperlinks'


Parsed hyperlink contents in each instant messages, parsed using cofacts/url-resolver.
The data is used in Cofacts system for indexing and retrieving messages.


Field: 'articleId', Data type: String, Description: 
Field: 'url', Data type: String, Description: The URL string detected in article
Field: 'normalizedUrl', Data type: String, Description: Canonical URL after normalization process including unfolding shortened URLs
Field: 'title', Data type: String, Description: Title of the scrapped web content


Note: Scrapped contents do not belong to Cofacts and are redistributed under research purposes.
The scrapping mechanism is not reliable either.
Researchers may need to implement their own scrapper if content is important in their research. ### 'article\_categories'


Categories linked to this article.


Field: 'articleId', Data type: String, Description: 
Field: 'categoryId', Data type: String, Description: 
Field: 'aiConfidence', Data type: Number, Description: Confidence level by AI marking this category. Empty for crowd-sourced labels.
Field: 'aiModel' ., Data type: String, Description: Name of the AI model marking this cateogry. Empty for crowd-sourced labels.
Field: 'userIdsha256', Data type: String, Description: The person that connected article and category.
Field: 'appId' ., Data type: String, Description: 
Field: 'negativeFeedbackCount', Data type: Integer, Description: Number of 'article\_category\_feedbacks' that has score '-1'
Field: 'positiveFeedbackCount', Data type: Integer, Description: Number of 'article\_category\_feedbacks' that has score '1'
Field: 'status', Data type: Enum string, Description: 'NORMAL': The category and article are connected. 'DELETED': The category does not connect to the article anymore.
Field: 'createdAt', Data type: ISO time string, Description: The time when the reply is connected to the article
Field: 'updatedAt', Data type: ISO time string, Description: The latest date when the category's status is updated ### 'categories'


Field: 'id', Data type: String, Description: 
Field: 'title', Data type: String, Description: Name of the category
Field: 'description', Data type: Text, Description: Definition of the category
Field: 'createdAt', Data type: ISO time string, Description: 
Field: 'updatedAt', Data type: ISO time string, Description: ### 'article\_replies'


Articles and replies are in has-and-belongs-to-many relationship. That is, an article can have multiple replies, and a reply can be connected to multiple similar articles.


'article\_replies' is the "join table" between 'articles' and 'replies', bringing 'articleId' and 'replyId' together, along with other useful properties related to this connection between an article and a reply.


One pair of 'articleId', 'replyId' will map to exactly one 'article\_reply'.


Field: 'articleId', Data type: String, Description: Relates to 'id' field of 'articles'
Field: 'replyId', Data type: String, Description: Relates to 'id' field of 'replies'
Field: 'userId', Data type: String, Description: The user connecting the reply with the article
Field: 'negativeFeedbackCount', Data type: Integer, Description: Number of 'article\_reply\_feedbacks' that has score '-1'
Field: 'positiveFeedbackCount', Data type: Integer, Description: Number of 'article\_reply\_feedbacks' that has score '1'
Field: 'replyType', Data type: Enum string, Description: Duplicated from 'replies''s type.
Field: 'appId', Data type: String, Description: 
Field: 'status', Data type: Enum string, Description: 'NORMAL': The reply and article are connected. 'DELETED': The reply does not connect to the article anymore. 'BLOCKED': It comes from a blocked user.
Field: 'createdAt', Data type: ISO time string, Description: The time when the reply is connected to the article
Field: 'updatedAt', Data type: ISO time string, Description: The latest date when the reply's status is updated ### 'replies'


Editor's reply to the article.


Field: 'id', Data type: String, Description: 
Field: 'type', Data type: Enum string, Description: Type of the reply chosen by the editor. 'RUMOR': The article contains rumor. 'NOT\_RUMOR': The article contains fact. 'OPINIONATED': The article contains personal opinions. 'NOT\_ARTICLE': The article should not be processed by Cofacts.
Field: 'reference', Data type: Text, Description: For 'RUMOR' and 'NOT\_RUMOR' replies: The reference to support the chosen 'type' and 'text'. For 'OPINIONATED' replies: References containing different perspectives from the 'article'. For 'NOT\_ARTICLE': empty string.
Field: 'userId', Data type: String, Description: The editor that authored this reply.
Field: 'appId', Data type: String, Description: 
Field: 'text', Data type: Text, Description: Reply text writtern by the editor
Field: 'createdAt', Data type: ISO Time string, Description: When the reply is written ### 'reply\_hyperlinks'


Parsed hyperlink contents in reply text and references, parsed using cofacts/url-resolver.
The data is used in Cofacts system for URL previews.


Field: 'replyId', Data type: String, Description: 
Field: 'url', Data type: String, Description: The URL string detected in article
Field: 'normalizedUrl', Data type: String, Description: Canonical URL after normalization process including unfolding shortened URLs
Field: 'title', Data type: String, Description: Title of the scrapped web content


Note: Scrapped contents do not belong to Cofacts and are redistributed under research purposes.
The scrapping mechanism implementation is not reliable either.
Researchers may need to implement their own scrapper if content is important in their research. ### 'reply\_requests'


Before an article is replied, users may submit 'reply\_requests' to indicate that they want this article to be answered.


When an article is first submitted to the article, an reply request is also created. Any further queries to the same article submits new 'reply\_requests'.


An user can only submit one reply request to an article.


Field: 'articleId', Data type: String, Description: The target of the request
Field: 'reason', Data type: Text, Description: The reason why the user wants to submit this reply request
Field: 'status', Data type: Enum string, Description: 'NORMAL' or 'BLOCKED'.
Field: 'positiveFeedbackCount', Data type: Text, Description: Number of editors think the reason is reasonable
Field: 'negativeFeedbackCount', Data type: Text, Description: Number of editors think the reason is nonsense
Field: 'createdAt', Data type: ISO Time string, Description: When the reply request is issued ### 'article\_reply\_feedbacks'


Editors and LINE bot users can express if a reply is useful by submitting 'article\_reply\_feedbacks' toward a 'article\_reply' with score '1' or '-1'.


The feedback is actually submitted toward an 'article\_reply', the connection between an article and a reply. This is because a reply can be connected to multiple articles. A reply that makes sense in one article does not necessarily mean that it is useful in answering another article. Therefore, the feedback count for a reply connecting to different articles are counted separately.


Field: 'articleId', Data type: String, Description: Relates to 'articleId' of the target 'article\_reply'
Field: 'replyId', Data type: String, Description: Relates to 'replyId' of the target 'article\_reply'
Field: 'score', Data type: Integer, Description: '1': Useful. '-1': Not useful.
Field: 'comment', Data type: Text, Description: Why the user chooses such score for this article reply
Field: 'status', Data type: Enum string, Description: 'NORMAL' or 'BLOCKED'.
Field: 'createdAt', Data type: ISO Time string, Description: When the feedback is submitted ### 'analytics'


Usage (visit / show) statistics of website and Cofacts LINE bot.


LINE bot data starts from April 2nd, 2018; website data starts from May 3rd, 2017.


Field: 'type', Data type: Enum string, Description: Either 'article' or 'reply'
Field: 'docId', Data type: String, Description: Article ID or Reply ID that is being visited / shown
Field: 'date', Data type: ISO Time string, Description: The date of usage, represented by start of the day (0:00:00+08:00)
Field: 'lineUser', Data type: Integer, Description: The number of LINE users who inspected this article / reply in Cofacts LINE bot in this date. May be empty if no such users
Field: 'lineVisit', Data type: Integer, Description: The number of times this article / reply is inspected in Cofacts LINE bot in this date. May be empty if no visits
Field: 'webUser', Data type: Integer, Description: The number of web users who visited this article page ('/article/') / reply page ('/reply/') in Cofacts website in this date. May be empty if no such users
Field: 'webVisit', Data type: Integer, Description: The number of page views of this article page ('/article/') / reply page ('/reply/') in Cofacts website in this date. May be empty if no page views ### 'anonymized\_usrs'


The users of Cofacts, including Cofacts chatbot and website users.


Field: 'userIdsha256', Data type: String, Description: The ID that is used in other tables to denote the creator of the entity.
Field: 'appId', Data type: String, Description: Where this user account is registered. 'RUMORS\_LINE\_BOT' is Cofacts official LINE account. Registered user on Cofacts website has empty 'appId'.
Field: 'createdAt', Data type: ISO Time string, Description: The initial registration date for the user.
Field: 'lastActiveAt', Data type: ISO Time string, Description: The last date the account is active.
Field: 'blockedReason', Data type: String, Description: If exists, all submission from the user is hidden by Cofacts WG. This field contains the announcement to the reason why Cofacts WG blocks such user.


[NOTICE] Caveats of using this data
-----------------------------------


The methodology we use to collect these data (i.e. how Cofacts works)
could have some impact on the data credibility.


!How cofacts work


Please keep in mind that all data in this dataset are user-generated,
thus is not free from noise and sampling bias coming from these sources:


* The distribution Cofacts' users may not reflect the real distribution of all LINE users in Taiwan.
* Users may not use Cofacts in the same way we want them to be.
Some 'articles' may not be actual messages circulating in LINE network.
* 'replies' may contain factual error.
All replies should be merely regarded as "responses to the original message ('article') to provide different point of view".
They are neither the "truth" nor the editor's personal opinion.
* There may also exist malicious users sending garbage 'articles' into the database. (Previous incident reports)
* The program to collect data and to generate dataset may contain error.
The dataset may be inaccurate systematically in this way.


Lastly, the dataset is provided without warrenty.


THE DATASET IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE DATASET OR THE USE OR OTHER DEALINGS IN THE DATASET.
TAGS
#task_categories-text-classification #task_categories-question-answering #size_categories-100K<n<1M #language-Chinese #license-cc-by-sa-4.0 #fact-checking #crowd-sourcing #region-us 
 ### Fields in All Tables


* 'userIdsha' (string) Hashed user identifier.
* 'appId' (string) Possible values include:
	+ 'LEGACY\_APP': Articles collected before 2017-03.
	+ 'RUMORS\_LINE\_BOT': Articles collected with the current LINE bot client after 2017-03.


These two fields together uniquely identify a user across different CSV files. For example, if one row (reply) in 'URL' and another row (feedback) in 'article\_reply\_feedbacks.csv' have identical 'userIdsha' and 'appId', it indicates that the reply and the feedback were submitted by the same user.


Also, these fields are commonly seen in multiple tables:


* 'status': The current visibility of this document. Possible values include:
	+ 'NORMAL': The document is normally visible.
	+ 'DELETED': The document is deleted by its author. For some entities (tables), deletion is not implemented, and thus does not have such value.
	+ 'BLOCKED': The document is hidden by Cofacts Working Group. These document are from a blocked user, with 'blockedReason' pointing to announcements in Cofacts Takedown Announcements.


Tables and their fields
----------------------- ### 'articles'


The instant messages LINE bot users submitted into the database.


Field: 'id', Data type: String, Description: 
Field: 'articleType', Data type: Enum string, Description: 'TEXT', 'IMAGE', 'VIDEO' or 'AUDIO'.
Field: 'status', Data type: Enum string, Description: 'NORMAL' or 'BLOCKED'.
Field: 'text', Data type: Text, Description: The instant message text
Field: 'normalArticleReplyCount', Data type: Integer, Description: The number of replies are associated to this article, excluding the deleted reply associations.
Field: 'createdAt', Data type: ISO time string, Description: When the article is submitted to the database.
Field: 'updatedAt', Data type: ISO time string, Description: Preserved, currently identical to 'createdAt'
Field: 'lastRequestedAt', Data type: ISO time string, Description: The submission time of the last 'reply\_request' is sent on the article, before the article is replied.
Field: 'userIdsha256', Data type: String, Description: Author of the article.
Field: 'appId', Data type: String, Description: 
Field: 'references', Data type: Enum string, Description: Where the message is from. Currently the only possible value is 'LINE'. ### 'article\_hyperlinks'


Parsed hyperlink contents in each instant messages, parsed using cofacts/url-resolver.
The data is used in Cofacts system for indexing and retrieving messages.


Field: 'articleId', Data type: String, Description: 
Field: 'url', Data type: String, Description: The URL string detected in article
Field: 'normalizedUrl', Data type: String, Description: Canonical URL after normalization process including unfolding shortened URLs
Field: 'title', Data type: String, Description: Title of the scrapped web content


Note: Scrapped contents do not belong to Cofacts and are redistributed under research purposes.
The scrapping mechanism is not reliable either.
Researchers may need to implement their own scrapper if content is important in their research. ### 'article\_categories'


Categories linked to this article.


Field: 'articleId', Data type: String, Description: 
Field: 'categoryId', Data type: String, Description: 
Field: 'aiConfidence', Data type: Number, Description: Confidence level by AI marking this category. Empty for crowd-sourced labels.
Field: 'aiModel' ., Data type: String, Description: Name of the AI model marking this cateogry. Empty for crowd-sourced labels.
Field: 'userIdsha256', Data type: String, Description: The person that connected article and category.
Field: 'appId' ., Data type: String, Description: 
Field: 'negativeFeedbackCount', Data type: Integer, Description: Number of 'article\_category\_feedbacks' that has score '-1'
Field: 'positiveFeedbackCount', Data type: Integer, Description: Number of 'article\_category\_feedbacks' that has score '1'
Field: 'status', Data type: Enum string, Description: 'NORMAL': The category and article are connected. 'DELETED': The category does not connect to the article anymore.
Field: 'createdAt', Data type: ISO time string, Description: The time when the reply is connected to the article
Field: 'updatedAt', Data type: ISO time string, Description: The latest date when the category's status is updated ### 'categories'


Field: 'id', Data type: String, Description: 
Field: 'title', Data type: String, Description: Name of the category
Field: 'description', Data type: Text, Description: Definition of the category
Field: 'createdAt', Data type: ISO time string, Description: 
Field: 'updatedAt', Data type: ISO time string, Description: ### 'article\_replies'


Articles and replies are in has-and-belongs-to-many relationship. That is, an article can have multiple replies, and a reply can be connected to multiple similar articles.


'article\_replies' is the "join table" between 'articles' and 'replies', bringing 'articleId' and 'replyId' together, along with other useful properties related to this connection between an article and a reply.


One pair of 'articleId', 'replyId' will map to exactly one 'article\_reply'.


Field: 'articleId', Data type: String, Description: Relates to 'id' field of 'articles'
Field: 'replyId', Data type: String, Description: Relates to 'id' field of 'replies'
Field: 'userId', Data type: String, Description: The user connecting the reply with the article
Field: 'negativeFeedbackCount', Data type: Integer, Description: Number of 'article\_reply\_feedbacks' that has score '-1'
Field: 'positiveFeedbackCount', Data type: Integer, Description: Number of 'article\_reply\_feedbacks' that has score '1'
Field: 'replyType', Data type: Enum string, Description: Duplicated from 'replies''s type.
Field: 'appId', Data type: String, Description: 
Field: 'status', Data type: Enum string, Description: 'NORMAL': The reply and article are connected. 'DELETED': The reply does not connect to the article anymore. 'BLOCKED': It comes from a blocked user.
Field: 'createdAt', Data type: ISO time string, Description: The time when the reply is connected to the article
Field: 'updatedAt', Data type: ISO time string, Description: The latest date when the reply's status is updated ### 'replies'


Editor's reply to the article.


Field: 'id', Data type: String, Description: 
Field: 'type', Data type: Enum string, Description: Type of the reply chosen by the editor. 'RUMOR': The article contains rumor. 'NOT\_RUMOR': The article contains fact. 'OPINIONATED': The article contains personal opinions. 'NOT\_ARTICLE': The article should not be processed by Cofacts.
Field: 'reference', Data type: Text, Description: For 'RUMOR' and 'NOT\_RUMOR' replies: The reference to support the chosen 'type' and 'text'. For 'OPINIONATED' replies: References containing different perspectives from the 'article'. For 'NOT\_ARTICLE': empty string.
Field: 'userId', Data type: String, Description: The editor that authored this reply.
Field: 'appId', Data type: String, Description: 
Field: 'text', Data type: Text, Description: Reply text writtern by the editor
Field: 'createdAt', Data type: ISO Time string, Description: When the reply is written ### 'reply\_hyperlinks'


Parsed hyperlink contents in reply text and references, parsed using cofacts/url-resolver.
The data is used in Cofacts system for URL previews.


Field: 'replyId', Data type: String, Description: 
Field: 'url', Data type: String, Description: The URL string detected in article
Field: 'normalizedUrl', Data type: String, Description: Canonical URL after normalization process including unfolding shortened URLs
Field: 'title', Data type: String, Description: Title of the scrapped web content


Note: Scrapped contents do not belong to Cofacts and are redistributed under research purposes.
The scrapping mechanism implementation is not reliable either.
Researchers may need to implement their own scrapper if content is important in their research. ### 'reply\_requests'


Before an article is replied, users may submit 'reply\_requests' to indicate that they want this article to be answered.


When an article is first submitted to the article, an reply request is also created. Any further queries to the same article submits new 'reply\_requests'.


An user can only submit one reply request to an article.


Field: 'articleId', Data type: String, Description: The target of the request
Field: 'reason', Data type: Text, Description: The reason why the user wants to submit this reply request
Field: 'status', Data type: Enum string, Description: 'NORMAL' or 'BLOCKED'.
Field: 'positiveFeedbackCount', Data type: Text, Description: Number of editors think the reason is reasonable
Field: 'negativeFeedbackCount', Data type: Text, Description: Number of editors think the reason is nonsense
Field: 'createdAt', Data type: ISO Time string, Description: When the reply request is issued ### 'article\_reply\_feedbacks'


Editors and LINE bot users can express if a reply is useful by submitting 'article\_reply\_feedbacks' toward a 'article\_reply' with score '1' or '-1'.


The feedback is actually submitted toward an 'article\_reply', the connection between an article and a reply. This is because a reply can be connected to multiple articles. A reply that makes sense in one article does not necessarily mean that it is useful in answering another article. Therefore, the feedback count for a reply connecting to different articles are counted separately.


Field: 'articleId', Data type: String, Description: Relates to 'articleId' of the target 'article\_reply'
Field: 'replyId', Data type: String, Description: Relates to 'replyId' of the target 'article\_reply'
Field: 'score', Data type: Integer, Description: '1': Useful. '-1': Not useful.
Field: 'comment', Data type: Text, Description: Why the user chooses such score for this article reply
Field: 'status', Data type: Enum string, Description: 'NORMAL' or 'BLOCKED'.
Field: 'createdAt', Data type: ISO Time string, Description: When the feedback is submitted ### 'analytics'


Usage (visit / show) statistics of website and Cofacts LINE bot.


LINE bot data starts from April 2nd, 2018; website data starts from May 3rd, 2017.


Field: 'type', Data type: Enum string, Description: Either 'article' or 'reply'
Field: 'docId', Data type: String, Description: Article ID or Reply ID that is being visited / shown
Field: 'date', Data type: ISO Time string, Description: The date of usage, represented by start of the day (0:00:00+08:00)
Field: 'lineUser', Data type: Integer, Description: The number of LINE users who inspected this article / reply in Cofacts LINE bot in this date. May be empty if no such users
Field: 'lineVisit', Data type: Integer, Description: The number of times this article / reply is inspected in Cofacts LINE bot in this date. May be empty if no visits
Field: 'webUser', Data type: Integer, Description: The number of web users who visited this article page ('/article/') / reply page ('/reply/') in Cofacts website in this date. May be empty if no such users
Field: 'webVisit', Data type: Integer, Description: The number of page views of this article page ('/article/') / reply page ('/reply/') in Cofacts website in this date. May be empty if no page views ### 'anonymized\_usrs'


The users of Cofacts, including Cofacts chatbot and website users.


Field: 'userIdsha256', Data type: String, Description: The ID that is used in other tables to denote the creator of the entity.
Field: 'appId', Data type: String, Description: Where this user account is registered. 'RUMORS\_LINE\_BOT' is Cofacts official LINE account. Registered user on Cofacts website has empty 'appId'.
Field: 'createdAt', Data type: ISO Time string, Description: The initial registration date for the user.
Field: 'lastActiveAt', Data type: ISO Time string, Description: The last date the account is active.
Field: 'blockedReason', Data type: String, Description: If exists, all submission from the user is hidden by Cofacts WG. This field contains the announcement to the reason why Cofacts WG blocks such user.


[NOTICE] Caveats of using this data
-----------------------------------


The methodology we use to collect these data (i.e. how Cofacts works)
could have some impact on the data credibility.


!How cofacts work


Please keep in mind that all data in this dataset are user-generated,
thus is not free from noise and sampling bias coming from these sources:


* The distribution Cofacts' users may not reflect the real distribution of all LINE users in Taiwan.
* Users may not use Cofacts in the same way we want them to be.
Some 'articles' may not be actual messages circulating in LINE network.
* 'replies' may contain factual error.
All replies should be merely regarded as "responses to the original message ('article') to provide different point of view".
They are neither the "truth" nor the editor's personal opinion.
* There may also exist malicious users sending garbage 'articles' into the database. (Previous incident reports)
* The program to collect data and to generate dataset may contain error.
The dataset may be inaccurate systematically in this way.


Lastly, the dataset is provided without warrenty.


THE DATASET IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE DATASET OR THE USE OR OTHER DEALINGS IN THE DATASET.