使用NLTK进行数据的收集

恬静的小魔龙 2020-12-22 09:37:22 6359

本文是使用Python和NLTK(开源自然语言工具包)的情感分析系列的第二篇。在本文中,我们将查看NLTK提供的数据集,以及将文本语料库以进行分析的示例。

情绪分析系列的目标是使用Python和开源自然语言工具包(NLTK)构建一个库,该库扫描社区帖子的回复,并检测回复是否使用负面、敌对或其他不友好的语言。

要开始使用自然语言工具包(NLTK)这样的库,进行自然语言处理(NLP),我们需要一些文本数据来开始探索。我们将查看NLTK提供的数据集,以及文本语料库以进行分析。

另外,我们还将探索Reddit API如何用于捕获NLP分析中有趣的评论数据。

NLTK数据集的分析

NLTK带来的一个便利是与工具包集成了丰富的数据集。您可以使用NLTK直接下载多个附加数据集。

让我们看一个包含在NLTK语料库中的数据集的例子,使用nltk.corpus.movie_reviews来查看数据。movie_reviews是来自IMDB的2,000个电影评论的集合,这些评论被标记为正面或负面评论。

如果要使用这些评论,首先要下载movie_reviews语料库。

import nltk
nltk.download('movie_reviews')
from nltk.corpus import movie_reviews

它只是一个文本文件的集合,其中包含了最初写在评论中的单词。

~/nltk_data/corpora/movie_reviews
├── README
├── neg
│   ├── cv000_29416.txt
│   ├── cv001_19502.txt
│   ...
│   ├── cv997_5152.txt
│   ├── cv998_15691.txt
│   └── cv999_14636.txt
└── pos
    ├── cv000_29590.txt
    ├── cv001_18431.txt
    ├── cv002_15918.txt
    ├── ...

此标记数据集可用于机器学习应用程序。在积极或消极的评论中最常用的词语可以用于监督培训,这样你就可以根据从分析中建立的模型来探索新的数据集。

我们将在第二部分回到这个想法。确实有数据集在NLTK网站上,如亚马逊的产品评论,Twitter的社交媒体帖子,等等。

如果要使用NLTK语料库中的数据集以外的数据集,怎么办?

NLTK不附带Reddit语料库,所以让我们以它为例来说明如何自己收集一些NLP数据。

从Reddit收集NLP数据

假设我们想要进行NLP情绪分析。我们需要一个包含用户或客户之间公开对话文本的数据集。

NLTK没有用于此类分析的现有数据集,因此我们需要为自己收集类似的数据集。在本练习中,我们将使用Reddit讨论中公开提供的数据。

为什么是Reddit?

Reddit,它是一个用户生成的文章、照片、视频和基于文本的文章的社区,这些文章来自一个非常大的不同兴趣群体。

该网站拥有超过4亿用户和13.8万活跃的感兴趣区域,该网站一直排在互联网上访问量最大的10个网站之列。

它也是人们讨论和询问有关技术、技术、新产品、书籍和许多其他主题的问题的地方。它在18-35岁的人群中特别受欢迎,受到许多营销者的追捧。

不管你的业务是做什么,都可以在Reddit中找到有相同兴趣的人一起讨论它。

数据是通过Reddit API向公众提供的,所以我们需要做一些设置来访问API。

开始使用Reddit API

要开始使用Reddit API,您需要完成几个步骤。

  1. 创建一个帐户
  2. 注册Reddit API访问
  3. 创建Reddit应用程序

创建一个帐户应该很简单。去Https://reddit.com并点击“注册”,或登录。

接下来,注册Reddit API访问。您可以在这里找到有关如何访问的详细信息:Https://www.reddit.com/wiki/api.

为了生产目的,阅读这些使用条款并接受它以进行API访问是很重要的。

注册后,您将登陆一个URL,用于创建Reddit应用程序:Https://www.reddit.com/prefs/apps/.

您可以选择任何适合您需要的值,但至少需要输入一个名称(我使用的是“sentiment analysis”)、类型(“script”)和重定向url(“http://localhost.com”).“)

1

一旦你点击创建应用程序,您将能够在应用程序中检索需要的信息。

安装Reddit API客户端

可以使用API调用,也可以使用这个Python应用程序端库Python Reddit API包装器(PRW)来调用。

使用PythonPip包管理器在终端或命令提示符中安装PythonAPI客户端:

pip install praw

要初始化客户端,需要按照Reddit的建议传递client_id, client_secret,以及user_agent,使用术语或标识您的应用程序。

我喜欢将这些设置为环境变量,这样它们就不会意外地包含在代码中。您可以通过使用标准Python中的函数来读取这些值。oslibrary。然后初始化ospraw库:

import os
import praw

reddit = praw.Reddit(
   client_id = os.environ['REDDIT_CLIENT_ID'],
   client_secret = os.environ['REDDIT_CLIENT_SECRET'],
   user_agent = "script:sentiment-analysis:v0.0.1 (by {})".format(os.environ['REDDIT_USERNAME'])
)

在初始化Reddit API之后,我们将看到一些有用的方法来获取用于情绪分析的数据。

从Subreddit检索提交

如果您有一个您感兴趣的产品、技术、活动或社区,您可以在讨论它的地方找到并订阅Subreddit。例如,python下面的Subreddit允许用户发布提交的内容(供讨论的主题),其他用户可以对其进行投票(向上或向下),并发布自己的评论或关于该主题的问题。

2

根据您的喜好,有几种方法可以对这些帖子进行排序或排序:

  • New-最近提交的帖子。
  • Top-在编辑投票系统中得票率最高的职位。
  • Up--最近出现了上升和评论的帖子。
  • Hot--最近的帖子不断上升/评论。
  • Controversial --这些帖子和评论既得到了支持,也得到了反对。

在Reddit API中,每个方法都有相应的方法。以下是几个例子:

# Query for a subreddit by name
sub = reddit.subreddit('learnpython')

# Can query for top posts for a time period, the top 20 posts, or the
# 10 most controversial posts of the past month
top_posts_of_the_day = sub.top('day')
hot_posts = sub.hot(limit=20)
controversial_posts = sub.controversial('month', limit=10)

# Can also search for use of a keyword
nltk_posts = sub.search(‘nltk’)

# Sample of some of the more interesting data about a 
# submission that could make for interesting analysis
for submission in controversial_posts:
    print("TITLE: {}".format(submission.title))
    print("AUTHOR: {}".format(submission.author))
    print("CREATED: {}".format(submission.created))
    print("COMMENTS: {}".format(submission.num_comments))
    print("UPS: {}".format(submission.ups))
    print("DOWNS: {}".format(submission.downs))
    print("URL: {}".format(submission.url))

Reddit上的每个提交都有一个URL。因此,无论我们是使用搜索、按日期进行过滤、还是只使用直接链接,我们都可以开始查看提交的内容,以获取用户评论。

如何在帖子上获得评论

当用户在帖子上发表评论时,其他用户可以回复。如果我们想了解我们的受众对提到我们的产品、服务或内容的帖子的反应,我们需要的主要数据是用户生成的评论,这样我们就可以对它们进行情感分析。

如果您知道某个特定帖子的URL很有趣,您可以直接从该链接检索提交:

post = "https://www.reddit.com/r/learnpython/comments/fwhcas/whats_the_difference_between_and_is_not"

# Instead of getting submissions by querying a subreddit, this time
# we go directly to a url for the post.
submission = reddit.submission(url=post)
submission.comments.replace_more(limit=None)

# We can get the comments which the API returns as a generator, but
# we can turn it into a list.
comments = submission.comments.list():

如果你在看这个网站,你只会看到超过一个特定阈值的评论。

您需要单击一个按钮来加载更多的注释。通过在查询注释之前取消限制,我们排除了那些嵌套的占位符,只获得了我们的情感分析所需的用户注释。

下一章

您已经看到了一些访问NLP预配置数据集的技术,以及从Reddit API和Reddit注释构建自己的数据集的技术。

NLP分析的下一章将在本文中讨论。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
恬静的小魔龙
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区