package com.ruoyi.biemo.nlp;

import com.hankcs.hanlp.classification.classifiers.IClassifier;
import com.hankcs.hanlp.classification.classifiers.NaiveBayesClassifier;
import com.ruoyi.biemo.utils.TestUtility;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * 情感分析
 */
public class SentimentAnalysisUtils {
    public static final String CORPUS_FOLDER = TestUtility.ensureTestData("ChnSentiCorp情感分析酒店评论", "http://hanlp.linrunsoft.com/release/corpus/ChnSentiCorp.zip");
    public static String analysis(String text){
        String result = "";
        IClassifier classifier = new NaiveBayesClassifier();
        try {
            classifier.train(CORPUS_FOLDER);
            result = classifier.classify(text);
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
        return result;
    }

    public static Object analysisImport(MultipartFile[] files, String name) {
        if(files!=null&&files.length>0){
            File file1 = new File(CORPUS_FOLDER+"/"+name);
            if(!file1.getParentFile().exists()){
                file1.mkdirs();
            }
            if(!file1.exists()){
                file1.mkdirs();
            }
            for(int i=0;i<files.length;i++){
                MultipartFile file = files[i];
                try {
                   File file2 =  new File(file1.getCanonicalPath()+"/"+ file.getOriginalFilename());
                    file.transferTo(file2);
                } catch (IOException ioException) {
                    ioException.printStackTrace();
                }
            }
            IClassifier classifier = new NaiveBayesClassifier();
            try {
                classifier.train(CORPUS_FOLDER);
            } catch (IOException ioException) {
                ioException.printStackTrace();
            }
        }
        return "ok";
    }

    public static List<String> getCurrSentiments(){
        File file = new File(CORPUS_FOLDER);
        File[] dirs = file.listFiles();
        List<String> result = new ArrayList<>();
        if(dirs!=null&&dirs.length>0){
            for(int i=0;i<dirs.length;i++){
                if(dirs[i].isDirectory()){
                    result.add(dirs[i].getName());
                }
            }
        }
        return result;
    }
}