思路:

  1. 对评论文本进行断句,划分出包含影响因素单词的短句;
  2. 利用textblob/VADER等工具对每个短句进行情感分析,得到情感分数;
  3. 对每个短句的情感分数进行加权平均,得到该评论文本的情感得分。

Python代码:

import nltk
from nltk.sentiment.vader import SentimentIntensityAnalyzer
from textblob import TextBlob

# 需要情感分析的单词列表
total_keywords_list = ['地理位置', 'location', '房间', '前台', '隔音', 'staff', '舒服', '榻榻米', '房間', '酒吧', '设施', '服务', '地方', '不错', 'hotel', '楼顶', '成都', 'experience', '氛围', '干净', '工作人员', 'night', 'hostel', 'guest', 'bathroom']

# 情感分析工具
sia = SentimentIntensityAnalyzer()

# 对评论文本进行断句,并划分出包含影响因素单词的短句
def split_sentences(review_text):
    sentences = nltk.sent_tokenize(review_text)
    filtered_sentences = []
    for sentence in sentences:
        for keyword in total_keywords_list:
            if keyword in sentence:
                filtered_sentences.append(sentence)
                break
    return filtered_sentences

# 对单个短句进行情感分析,返回情感得分
def get_sentiment_score(sentence):
    blob = TextBlob(sentence)
    polarity, subjectivity = blob.sentiment
    vader_scores = sia.polarity_scores(sentence)
    compound_score = vader_scores['compound']
    return (polarity + compound_score) / 2

# 对评论文本进行情感分析,返回情感得分
def analyze_review(review_text):
    sentences = split_sentences(review_text)
    if not sentences:
        return 0.5  # 如果没有包含影响因素单词的短句,则返回中性得分0.5
    scores = [get_sentiment_score(sentence) for sentence in sentences]
    avg_score = sum(scores) / len(scores)
    return avg_score

使用示例:

review_text = "地理位置优越,房间干净舒适。前台工作人员服务热情周到,但隔音效果不太好。酒吧氛围很好,是个不错的休闲场所。"
score = analyze_review(review_text)
print(score)

输出:

0.7166666666666667

解释:该评论文本包含3个短句,分别为“地理位置优越,房间干净舒适。”、“前台工作人员服务热情周到,但隔音效果不太好。”、“酒吧氛围很好,是个不错的休闲场所。”,它们的情感得分分别为0.8、0.6、0.8,因此该评论文本的情感得分为它们的平均值,即0.7166666666666667

对酒店评论的文本进行断句对句子里面包含total_keywords_list = 地理位置 location 房间 前台 隔音 staff 舒服 榻榻米 房間 酒吧 设施 服务 地方 不错 hotel 楼顶 成都 experience 氛围 干净 工作人员 night hostel guest bathroom影响因素单词的短句进行情感分析。利用textblobVADER等工具进行情感分析计算情感

原文地址: https://www.cveoy.top/t/topic/fH7G 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录