微博情感分析代码,随取随用

月小水长

共 1673字,需浏览 4分钟

 ·

2021-11-15 23:26

 点击上方 月小水长 并 设为星标,第一时间接收干货推送

这是 月小水长 的第 98 篇原创干货

目前公众号平台改变了推送机制,点“赞”、点“在看”、添加过“星标”的同学,都会优先接收到我的文章推送,所以大家读完文章后,记得点一下“在看”和“赞”。

情感分析有三种方式。

一是自建模型训练,这种费时费力精度大概率不高。

二是使用百度等在线接口,使用 requests 等请求库调用,精度应该最高,但是这种有并发限制。

三是使用一些开源的模型,比如 SnowNLP 这种,可以直接 pip install,这种精度没有百度的高应该,但是没有接口并发等限制。

其中这三种本质上都是训练好的模型在起作用,第二种是 web sdk,第三种是 local sdk。

本文使用的第三种,需要先 pip 安装  SnowNLP pandas 这两个库。

from snownlp import SnowNLPimport pandas as pddef sentiment_score(input_file, text_col = 'text'):    df = pd.read_csv(input_file)    sentiment_score_col = 'sentiment_score'    is_scored_col = 'has_scored'    df[is_scored_col] = [False for _ in range(df.shape[0])]    for index, row in df.iterrows():        print(f'{index + 1}/{df.shape[0]}')        if row[is_scored_col] == True:            continue        text = row[text_col]        # 去除 html 标签        text = filter_html(text)        if len(text) == 0 or text == None:            # 本行没有文本            sentiment = -1        else:            sentiment = SnowNLP(text).sentiments        df.loc[index, sentiment_score_col] = sentiment        df.loc[index, is_scored_col] = True
df.to_csv(input_file, index=False, encoding='utf-8-sig')

上面这个函数的作用是,输入一个 csv 文件名,并且其文本列名为 text,自动输出一个给文本打好情感分的同名 csv 文件。情感分所在列名为 sentiment_score,其值介于 0-1 之间,值小于 0.2 可以判为消极,大于 0.6 可以判为积极。

比如我有一个 12345678.csv 文件,其内容列为 content,可以这样给这个文件打分。

sentiment_score(input_file='12345678.csv', text_col='content')
其中 filter_html 函数 对 html 标签作了过滤。
import redef filter_html(text):    # text为包含html标签内容    content = re.sub("<[^>]*?>", "", text)    return content
以上所有代码,复制到 py 文件中即可用~
浏览 42
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报