From d59cf9aaa7cef4c937354e1a56d1d1aa4c7fc786 Mon Sep 17 00:00:00 2001 From: redhongx <1144981128@qq.com> Date: Wed, 3 Jul 2024 09:56:18 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90yuqing.py=E3=80=91=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E8=83=BD=E5=9C=A8=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=A4=B9=E4=B8=8B=E7=9B=B4=E6=8E=A5=E8=BF=90=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- model/yuqing.py | 83 +++++++++++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 38 deletions(-) diff --git a/model/yuqing.py b/model/yuqing.py index b3f698a..e13253c 100644 --- a/model/yuqing.py +++ b/model/yuqing.py @@ -1,48 +1,55 @@ -import pandas as pd # 用于数据处理 -import numpy as np # 用于科学计算 -import csv # 用于读取CSV文件 -from snownlp import SnowNLP # 用于中文自然语言处理(此处未实际使用) -from sklearn.feature_extraction.text import TfidfVectorizer # 用于文本特征提取 -from sklearn.naive_bayes import MultinomialNB # 用于多项式朴素贝叶斯分类 -from sklearn.model_selection import train_test_split # 用于划分训练集和测试集 -from sklearn.metrics import accuracy_score # 用于计算模型准确度 +from snownlp import SnowNLP # 引入SnowNLP库,用于中文情感分析 +import csv # 用于处理CSV文件的读写操作 +import os # 用于操作系统相关功能 +import sys +import os +# 获取当前文件的绝对路径 +current_file_path = os.path.abspath(__file__) -def getSentiment_data(): - # 从CSV文件中读取情感数据 - sentiment_data = [] - with open('./target.csv', 'r', encoding='utf8') as readerFile: - reader = csv.reader(readerFile) - for data in reader: - sentiment_data.append(data) - return sentiment_data +# 获取当前文件的父目录路径 +parent_dir = os.path.dirname(current_file_path) +# 获取父目录的父目录路径,也就是项目根目录 +project_root_dir = os.path.dirname(parent_dir) -ef -model_train(): -# 获取情感数据并转换为DataFrame -sentiment_data = getSentiment_data() -df = pd.DataFrame(sentiment_data, columns=['text', 'sentiment']) +# 将项目根目录添加到 Python 路径中 +sys.path.append(project_root_dir) -# 将数据集划分为训练集和测试集,测试集占20% -train_data, test_data = train_test_split(df, test_size=0.2, random_state=42) +# 现在可以导入 utils 目录中的模块了 +from utils.getPublicData import getAllCommentsData # 自定义函数,用于获取评论数据 -# 初始化TfidfVectorizer,并对训练集和测试集进行文本特征提取 -vectorize = TfidfVectorizer() -X_train = vectorize.fit_transform(train_data['text']) -y_train = train_data['sentiment'] -X_test = vectorize.transform(test_data['text']) -y_test = test_data['sentiment'] +def targetFile(): + targetFile = 'target.csv' # 定义目标文件名称 + commentsList = getAllCommentsData() # 获取所有评论数据 -# 初始化多项式朴素贝叶斯分类器,并进行训练 -classifier = MultinomialNB() -classifier.fit(X_train, y_train) + rateData = [] # 用于存储处理后的评论数据 + good = 0 # 记录正面评论数量 + bad = 0 # 记录负面评论数量 + middle = 0 # 记录中性评论数量 -# 对测试集进行预测 -y_pred = classifier.predict(X_test) + # 遍历所有评论,进行情感分析 + for index, i in enumerate(commentsList): # enumerate 是 Python 中的一个内置函数,它允许我们在遍历可迭代对象(如列表、元组或字符串)时同时获取元素的索引和值。 + # |articleId|created_at | likes_counts | region | content| authorName | authorGender | authorAddress | authorAvatar + value = SnowNLP(i[4]).sentiments # 对评论内容进行情感分析 + if value > 0.5: # 如果情感值大于0.5,判定为正面评论 + good += 1 + rateData.append([i[4], '正面']) + elif value == 0.5: # 如果情感值等于0.5,判定为中性评论 + middle += 1 + rateData.append([i[4], '中性']) + elif value < 0.5: # 如果情感值小于0.5,判定为负面评论 + bad += 1 + rateData.append([i[4], '负面']) -# 计算模型准确度 -accuracy = accuracy_score(y_test, y_pred) + # 将处理后的评论数据写入目标文件 + for i in rateData: + with open(targetFile, 'a+', encoding='utf8', newline='') as f: + writer = csv.writer(f) + writer.writerow(i) # 将每条数据写入CSV文件 -if __name__ == "__main__": - model_train() # 训练模型并计算准确度 +def main(): + targetFile() # 调用targetFile函数进行数据处理 + +if __name__ == '__main__': + main() # 运行主函数