需求分析
该代码旨在分析B站视频弹幕数据,包括情绪分类、情感分析和按秒计算弹幕数量。分析结果将作为一个CSV文件保存。
功能介绍
- 读取弹幕文件和词库文件。
- 对弹幕内容进行清洗和分词。
- 对弹幕进行情绪分类和情感分析。
- 按秒计算每个弹幕的情绪数量和情感得分。
- 将分析结果保存为CSV文件。
重点代码介绍
-
定义了
document_to_list()
函数,用于将文档内容读取为列表。 -
定义了
clean_text()
函数,用于对弹幕内容进行清洗。 -
定义了
count()
函数,用于计算每个弹幕的情绪数量。 -
定义了
sentiment_score()
函数,用于计算每个弹幕的情感得分。 -
定义了
Analyze()
函数,用于分析弹幕数据并将结果保存为CSV文件。 -
清理文本
def clean_text(text):
# 使用正则表达式删除特殊字符
text = re.sub(r"[^\w\s]", "", text)
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
u"\U00002702-\U000027B0"
"]+", flags=re.UNICODE)
text = emoji_pattern.sub(r'', text)
return text.strip()
这个函数用于清理文本,去除特殊字符和表情符号,使得分析过程更加准确。
- 计算情绪
def count(cut_list):
emo_cnt = {
"anger": 0, "disgust": 0, "fear": 0, "joy": 0, "sadness": 0}
danmuku_emotion = []
for word in cut_list:
if word in anger:
emo_cnt["anger"] += 1
if word in disgust:
emo_cnt["disgust"] += 1
if word in fear:
emo_cnt["fear"] += 1
if word in joy:
emo_cnt["joy"] += 1
if word in sadness:
emo_cnt["sadness"] += 1
emo_max = max(emo_cnt.values())
if emo_max == 0:
danmuku_emotion.append("none")
else:
for key, value in emo_cnt.items():
if value == emo_max:
danmuku_emotion.append(key)
if len(danmuku_emotion) == 1:
danmuku_emotion = danmuku_emotion[0]
else