用NodeJS进行Twitter情感分析

如果你想知道大家对某件事情的看法,Twitter 是最好的地方了。Twitter 是观点持续不断的涌现出来的地方,每秒钟大概有 6000 条新 Twitter 发送出来。因特网上的发展很快,如果你想与时俱进或者跟上潮流,Twitter 就是你要去的地方。 2018-09-04 11:45:31 前端JavaScriptNodeJS 我用Python爬取了14年所有的福彩3D信息,彩民们,只能帮你们到这了 彩票预测是否靠谱?彩票预测也分人而异,江湖上骗术很多,有些甚至会误以为彩票预测的准确度可以很高,这些操盘手法,让不知原理的彩民心甘情愿地掏钱买料。 2018-09-04 11:14:59 Python福彩3D 10个Python常见面试题,这些弄不明白不要说学过Python! Python是个非常受欢迎的编程语言,随着近些年机器学习、云计算等技术的发展,Python的职位需求越来越高。下面我收集了10个Python面试官经常问的问题,供大家参考学习。 2018-09-04 11:10:31 Python编程语言面试 用Python分析数千个微信昵称之后,我们发现90后和00后是这样的人! 这是一篇技术文,也是一篇not技术文,今天分享的是,当笔者获取了微信小程序英文取名的3500多个微信用户昵称、年龄段后,分析得到下面结果……

如果你想知道大家对某件事情的看法,Twitter 是最好的地方了。Twitter 是观点持续不断的涌现出来的地方,每秒钟大概有 6000 条新 Twitter 发送出来。因特网上的发展很快,如果你想与时俱进或者跟上潮流,Twitter 就是你要去的地方。

[[242505]]

如果你想知道大家对某件事情的看法,Twitter 是最好的地方了。Twitter 是观点持续不断的涌现出来的地方,每秒钟大概有 6000 条新 Twitter 发送出来。因特网上的发展很快,如果你想与时俱进或者跟上潮流,Twitter 就是你要去的地方。

现在,我们生活在一个数据为王的时代,很多公司都善于运用 Twitter 上的数据。根据测量到的他们新产品的人气,尝试预测之后的市场趋势,分析 Twitter 上的数据有很多用处。通过数据,商人把产品卖给合适的用户,收集关于他们品牌和改进的反馈,或者获取他们产品或促销活动失败的原因。不仅仅是商人,很多政治和经济上的决定是在观察人们意见的基础上所作的。今天,我会试着让你感受下关于 Twitter 的简单 情感分析,判断这个 Twitter 是正能量、负能量还是中性的。这不会像专业人士所用的那么复杂,但至少,它会让你知道挖掘观念的想法。

我们将使用 NodeJs,因为 JavaScript 太常用了,而且它还是最容易入门的语言。

前置条件:

  • 安装了 NodeJs 和 NPM
  • 有 NodeJs 和 NPM 包的经验
  • 熟悉命令行。

好了,就是这样。开始吧。

开始

为了你的项目新建一个目录,进入这个目录下面。打开终端(或是命令行)。进入刚创建的目录下面,运行命令 npm init -y。这会在这个目录下创建一个 package.json 文件。现在我们可以安装需要的 npm 包了。只需要创建一个新文件,命名为 index.js 然后我们就完成了初始的编码。

获取推文

好了,我们想要分析 Twitter ,为了实现这个目的,我们需要以编程的方式访问 Twitter。为此,我们要用到 twit 包。因此,先用 npm i wit 命令安装它。我们还需要注册一个 App,以通过我们的账户来访问 Twitter 的 API。点击这个 链接,填写所有项目,从 “Keys and Access Token” 标签页中复制 “Consumer Key”、“Consumer Secret”、“Access token” 和 “Access Token Secret” 这几项到一个 .env 文件中,就像这样:

  1. # .env
  2. # replace the stars with values you copied
  3. CONSUMER_KEY=************
  4. CONSUMER_SECRET=************
  5. ACCESS_TOKEN=************
  6. ACCESS_TOKEN_SECRET=************

现在开始。

用你最喜欢的代码编辑器打开 index.js。我们需要用 npm i dotenv 命令安装 dotenv 包来读取 .env 文件。好了,创建一个 API 实例。

  1. const Twit = require('twit');
  2. const dotenv = require('dotenv');
  3. dotenv.config();
  4. const { CONSUMER_KEY
  5. , CONSUMER_SECRET
  6. , ACCESS_TOKEN
  7. , ACCESS_TOKEN_SECRET
  8. } = process.env;
  9. const config_twitter = {
  10. consumer_key: CONSUMER_KEY,
  11. consumer_secret: CONSUMER_SECRET,
  12. access_token: ACCESS_TOKEN,
  13. access_token_secret: ACCESS_TOKEN_SECRET,
  14. timeout_ms: 60*1000
  15. };
  16. let api = new Twit(config_twitter);

这里已经用所需的配置文件建立了到 Twitter 上的连接。但我们什么事情都没做。先定义个获取推文的函数:

  1. async function get_tweets(q, count) {
  2. let tweets = await api.get('search/tweets', {q, count, tweet_mode: 'extended'});
  3. return tweets.data.statuses.map(tweet => tweet.full_text);
  4. }

这是个 async 函数,因为 api.get 函数返回一个 promise 对象,而不是 then 链,我想通过这种简单的方式获取推文。它接收两个参数 qcountq 是查询或者我们想要搜索的关键字,count 是让这个 api 返回的推文数量。

目前为止我们拥有了一个从 Twitter 上获取完整文本的简单方法。不过这里有个问题,现在我们要获取的文本中可能包含某些连接或者由于转推而被截断了。所以我们会编写另一个函数,拆解并返回推文的文本,即便是转发的推文,并且其中有链接的话就删除。

  1. function get_text(tweet) {
  2. let txt = tweet.retweeted_status ? tweet.retweeted_status.full_text : tweet.full_text;
  3. return txt.split(/ |\n/).filter(v => !v.startsWith('http')).join(' ');
  4. }
  5. async function get_tweets(q, count) {
  6. let tweets = await api.get('search/tweets', {q, count, 'tweet_mode': 'extended'});
  7. return tweets.data.statuses.map(get_text);
  8. }

现在我们拿到了文本。下一步是从文本中获取情感。为此我们会使用 npm 中的另一个包 —— sentiment。让我们像安装其他包那样安装 sentiment,添加到脚本中。

  1. const sentiment = require('sentiment')

sentiment 用起来很简单。我们只用把 sentiment 函数用在我们想要分析的文本上,它就能返回文本的相对分数。如果分数小于 0,它表达的就是消极情感,大于 0 的分数是积极情感,而 0,如你所料,表示中性的情感。基于此,我们将会把推文打印成不同的颜色 —— 绿色表示积极,红色表示消极,蓝色表示中性。为此,我们会用到 colors 包。先安装这个包,然后添加到脚本中。

  1. const colors = require('colors/safe');

好了,现在把所有东西都整合到 main 函数中。

  1. async function main() {
  2. let keyword = \* define the keyword that you want to search for *\;
  3. let count = \* define the count of tweets you want *\;
  4. let tweets = await get_tweets(keyword, count);
  5. for (tweet of tweets) {
  6. let score = sentiment(tweet).comparative;
  7. tweet = `${tweet}\n`;
  8. if (score > 0) {
  9. tweet = colors.green(tweet);
  10. } else if (score < 0) {
  11. tweet = colors.red(tweet);
  12. } else {
  13. tweet = colors.blue(tweet);
  14. }
  15. console.log(tweet);
  16. }
  17. }

最后,执行 main 函数。

  1. main();

就是这样,一个简单的分析推文中的基本情感的脚本。

  1. \\ full script
  2. const Twit = require('twit');
  3. const dotenv = require('dotenv');
  4. const sentiment = require('sentiment');
  5. const colors = require('colors/safe');
  6. dotenv.config();
  7. const { CONSUMER_KEY
  8. , CONSUMER_SECRET
  9. , ACCESS_TOKEN
  10. , ACCESS_TOKEN_SECRET
  11. } = process.env;
  12. const config_twitter = {
  13. consumer_key: CONSUMER_KEY,
  14. consumer_secret: CONSUMER_SECRET,
  15. access_token: ACCESS_TOKEN,
  16. access_token_secret: ACCESS_TOKEN_SECRET,
  17. timeout_ms: 60*1000
  18. };
  19. let api = new Twit(config_twitter);
  20. function get_text(tweet) {
  21. let txt = tweet.retweeted_status ? tweet.retweeted_status.full_text : tweet.full_text;
  22. return txt.split(/ |\n/).filter(v => !v.startsWith('http')).join(' ');
  23. }
  24. async function get_tweets(q, count) {
  25. let tweets = await api.get('search/tweets', {q, count, 'tweet_mode': 'extended'});
  26. return tweets.data.statuses.map(get_text);
  27. }
  28. async function main() {
  29. let keyword = 'avengers';
  30. let count = 100;
  31. let tweets = await get_tweets(keyword, count);
  32. for (tweet of tweets) {
  33. let score = sentiment(tweet).comparative;
  34. tweet = `${tweet}\n`;
  35. if (score > 0) {
  36. tweet = colors.green(tweet);
  37. } else if (score < 0) {
  38. tweet = colors.red(tweet);
  39. } else {
  40. tweet = colors.blue(tweet)
  41. }
  42. console.log(tweet)
  43. }
  44. }
  45. main();

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月5日 04:22
下一篇 2023年5月5日 04:22

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信