对酒店评论的文本进行断句对句子里面包含total_keywords_list = 地理位置 location 房间 前台 隔音 staff 舒服 榻榻米 房間 酒吧 设施 服务 地方 不错 hotel 楼顶 成都 experience 氛围 干净 工作人员 night hostel guest bathroom影响因素单词的短句进行情感分析。利用textblobVADER等工具进行情感分析计算情感
思路:
- 对评论文本进行断句,划分出包含影响因素单词的短句;
- 利用textblob/VADER等工具对每个短句进行情感分析,得到情感分数;
- 对每个短句的情感分数进行加权平均,得到该评论文本的情感得分。
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
原文地址: https://www.cveoy.top/t/topic/fH7G 著作权归作者所有。请勿转载和采集!