import pandas as pd
import pickle
from config import Config
from sklearn.feature_extraction.text import TfidfVectorizer # TF-IDF类
from sklearn.ensemble import RandomForestClassifier # 随机森林
from sklearn.metrics import precision_score,recall_score,f1_score

config = Config()

if __name__ == '__main__':
    # 1- 读取验证集数据
    df = pd.read_csv(config.process_test_datapath,encoding="UTF-8")
    # 获得特征和目标值
    words = df["words"]
    y = df["label"]

    # 2- 加载训练好的模型
    with open(config.rf_model_path,mode="rb") as f:
        model:RandomForestClassifier = pickle.load(f)

    with open(config.tfidf_model_path,mode="rb") as f:
        tfidf:TfidfVectorizer = pickle.load(f)

    # 3- 对数据集中words进行TF-IDF的处理
    x = tfidf.transform(words)

    # 4- 预测
    y_pred = model.predict(x)

    # 5- 输出指标
    print("预测的精确率：",precision_score(y,y_pred,average="macro"))
    print("预测的召回率：",recall_score(y,y_pred,average="macro"))
    print("预测的F1值：",f1_score(y,y_pred,average="macro"))

    # 6- 将预测结果作为新字段放到DF中，然后写出成文件
    df["pred"] = y_pred
    df.to_csv(config.predict_result_path, sep="\t", index=False, header=True)