首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于json格式的facebook数据运行情绪分析

基于json格式的facebook数据运行情绪分析
EN

Stack Overflow用户
提问于 2022-04-12 02:06:27
回答 1查看 277关注 0票数 0

首先,我想说,我对编码非常陌生,而且对最基本的知识也知之甚少。

我的任务是从facebook上抓取数据,并对其进行情绪分析。我使用scraping-bot.io获取数据,并将其放在json文件中,格式如下

代码语言:javascript
复制
{
    "owner_url": "https://www.facebook.com/########",
    "url": "https://www.facebook.com/post",
    "name": "Page name",
    "date": "date",
    "post_text": "Post title",
    "media_url": "media url attached",
    "likes": ###,
    "shares": ###,
    "num_comments": ###,
    "scrape_time": "date",
    "comments": [
      {
        "author_name": "Name",
        "text": "Comment text",
        "created": "Date"
      },

这些帖子是西班牙语的,所以我查找了一个库来进行分析。我选择了https://pypi.org/project/sentiment-analysis-spanish/ (不确定它是否是最好的,所以我也愿意接受这方面的建议)

理想情况下,我希望能够打开json文件,对"text“进行情感分析,然后将数据保存到相同或新的文件中,以便在另一个程序中可视化。

到目前为止,这就是我所拥有的

代码语言:javascript
复制
from sentiment_analysis_spanish import sentiment_analysis
sentiment = sentiment_analysis.SentimentAnalysisSpanish()
 
f = open('C:/Users/vnare/Documents/WebScraping.json', encoding='utf-8-sig')
 
data = json.load(f)
 
for i in range(len('text')):
    print(sentiment.sentiment(i))

目前,它给出了以下错误AttributeError:'int‘对象没有属性’far‘,但我确信还有更多的错误在那里。我感谢你提供的任何帮助

EN

回答 1

Stack Overflow用户

发布于 2022-04-12 02:32:03

AttributeError:'int‘对象没有属性'lower’意味着整数不能被小写。这意味着在代码中的某个地方,您试图调用整数上的lower() string方法。

如果您查看您提供的情感分析文档,您将看到print(sentiment.sentiment("something"))将评估“某某物”的情绪,并给出1到0之间的分数。

我的猜测是,当您调用sentiment.sentiment("some text")时,它将使用lower()将传递给所有小写的文本进行转换。如果您要传递一个字符串,这会很好,但是您目前正在传递一个整数!

通过使用for i in range(),您将表示希望从0到结尾的数字范围。这意味着你的i将永远是一个整数!

您需要循环使用JSON数据来访问键/值对。“文本”不能像上面那样直接访问,但是在JSON数据中,它可以是!https://www.geeksforgeeks.org/json-with-python/

要查看的重要内容是您要访问的JSON数据的格式。首先,您需要访问一个名为“注释”的字典键。然而,“评论”里面是什么呢?

[{'author_name': 'Name', 'text': 'Comment text', 'created': 'Date'}]

它实际上是列表中另一个键值对的字典。假设列表索引从0开始,并且在您的示例中只有一个列表元素(字典),那么接下来我们需要使用索引0来访问字典。现在,我们将寻找关键的‘文本’,如你最初。

在学习python时,我强烈建议在尝试调试时使用大量的print语句!这可以帮助您查看程序所看到的内容,从而知道错误在哪里。

代码语言:javascript
复制
import json
from sentiment_analysis_spanish import sentiment_analysis

sentiment = sentiment_analysis.SentimentAnalysisSpanish()

f = open('WebScraping.json', encoding='utf-8-sig')

data = json.load(f)
print(data)

comments = data['comments']
print(comments)

text = comments[0]['text']
print(text)

sentimentScore = sentiment.sentiment(text)
print(sentimentScore)

当您运行此程序时,输出将显示“数据”中的内容、“评论”中的内容、“文本”中的内容以及情感得分。

代码语言:javascript
复制
{'owner_url': 'https://www.facebook.com/########', 'url': 'https://www.facebook.com/post', 'name': 'Page name', 'date': 'date', 'post_text': 'Post title', 'media_url': 'media url attached', 'likes': 234, 'shares': 500, 'num_comments': 100, 'scrape_time': 'date', 'comments': [{'author_name': 'Name', 'text': 'Comment text', 'created': 'Date'}]}

[{'author_name': 'Name', 'text': 'Comment text', 'created': 'Date'}]
Comment text

0.49789225920557484

这就是我所看到的“注释”里面是一个列表中的字典。

现在您已经了解了它是如何工作的,下面是一种更有效的方法来运行代码,而不需要所有额外的打印!您可以看到,我现在正在实现前面使用的for循环,因为在现实场景中可能有多个注释。

代码语言:javascript
复制
import json
from sentiment_analysis_spanish import sentiment_analysis

sentiment = sentiment_analysis.SentimentAnalysisSpanish()

f = open('WebScraping.json', encoding='utf-8-sig')

data = json.load(f)
comments = data['comments']
i = 0

for i in range (len(comments)):
     comment = comments[i]['text']
     sentimentScore = sentiment.sentiment(comment)
     print(f"The sentiment score of this comment is {sentimentScore}.")
     print(f"The comment was: '{comment}'.")

这将导致以下输出。

代码语言:javascript
复制
The sentiment score of this comment is 0.49789225920557484.
The comment was: 'Comment 1'.
The sentiment score of this comment is 0.49789225920557484.
The comment was: 'Comment 2'.

这是我用来参考的文件。

代码语言:javascript
复制
{
    "owner_url": "https://www.facebook.com/########",
    "url": "https://www.facebook.com/post",
    "name": "Page name",
    "date": "date",
    "post_text": "Post title",
    "media_url": "media url attached",
    "likes": 234,
    "shares": 500,
    "num_comments": 100,
    "scrape_time": "date",
    "comments": [
      {
        "author_name": "Name",
        "text": "Comment 1",
        "created": "Date"
      },
      {
        "author_name": "Name",
        "text": "Comment 2",
        "created": "Date"
      }
    ]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71836214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档