作者:Susan Li
翻译:杨毅远
校对:吴金笛
本文长度为4400字,建议阅读8分钟
本文为大家介绍了基于自然语言处理的COVID-19虚假新闻检测方法以及可视化方法,并结合真实的新闻数据集与完整的代码复现了检测以及可视化的过程。
标签:自然语言处理 数据可视化
最近有这样一则新闻:一半的加拿大人被COVID-19的阴谋论所愚弄,这个新闻真的令人心碎。
世界卫生组织(WHO)称,与COVID-19相关的信息流行病与病毒本身同样危险。同样地,阴谋论、神话和夸大的事实可能会产生超出公共健康范围的后果。
多亏了Lead Stories,Poynter,FactCheck.org,Snopes,EuVsDisinfo等项目可以监视、识别和检查散布在世界各地的虚假信息。
为了探究COVID-19虚假新闻的内容,我对于真实新闻和虚假新闻进行了严格的定义。具体来说,真实新闻是众所周知的真实报道并且来自可信赖的新闻机构;虚假新闻是众所周知的错误报道并且来自知名的有意试图散布错误信息的虚假新闻网站。
基于以上定义,我从各种新闻资源中收集了1100篇有关COVID-19的新闻文章和社交网络帖子并对其进行了标记。
数据集可以在这里找到:
https://raw.githubusercontent.com/susanli2016/NLP-with-Python/master/data/corona_fake.csv
数据
1. from nltk.corpus import stopwords
2. STOPWORDS = set(stopwords.words('english'))
3. from sklearn.feature_extraction.text import CountVectorizer
4.
5. from textblob import TextBlob
6. import plotly.express as px
7. import plotly.figure_factory as ff
8. import plotly.graph_objects as go
9.
10. df = pd.read_csv('data/corona_fake.csv')
11. df.loc[df['label'] == 'Fake', ['label']] = 'FAKE'
12. df.loc[df['label'] == 'fake', ['label']] = 'FAKE'
13. df.loc[df['source'] == 'facebook', ['source']] = 'Facebook'
14.
15. df.loc[5]['label'] = 'FAKE'
16. df.loc[15]['label'] = 'TRUE'
17. df.loc[43]['label'] = 'FAKE'
18. df.loc[131]['label'] = 'TRUE'
19. df.loc[242]['label'] = 'FAKE'
20.
21. df = df.sample(frac=1).reset_index(drop=True)
22. df.label.value_counts()
process_data.py
经过数据清洗,我们可以看到共有586篇真实新闻和578篇虚假新闻。
df.loc[df['label'] == 'TRUE'].source.value_counts()
图一
真实新闻主要来自哈佛健康出版社(Harvard Health Publishing)、《纽约时报》(The New York Times)、约翰霍普金斯大学彭博公共卫生学院(Johns Hopkins Bloomberg School of Public Health)、世卫组织(WHO)以及疾病预防控制中心(CDC)等机构。
df.loc[df['label'] == 'FAKE'].source.value_counts()
图二
其中的几个虚假新闻是从Facebook的帖子中收集的,其是一个名为Natural News的极右网站和一个名为orthomolecular.org的替代医学网站。一些文章或帖子已从互联网或社交网络中删除,但是,他们仍能够在网络中被查询到。
使用下面的函数,我们将能够阅读任何给定的新闻内容并由此确定如何清洗它们:
1. def print_plot(index):
2. example = df[df.index == index][['text','label']].values[