Java 斯坦福NLP-汉语情感分析

Java 斯坦福NLP-汉语情感分析,java,dataset,stanford-nlp,sentiment-analysis,Java,Dataset,Stanford Nlp,Sentiment Analysis,我想创建一个情绪分析程序,接收中文数据集,并确定是否有更多的正面、负面或中性陈述。下面的例子,我创建了一个英语情感分析(StanfordCorenlp),它完全符合我的要求,但采用中文 问题: Properties props = new Properties(); props.setProperty("annotators", "tokenize, ssplit, parse, sentiment"); // gender,lemma,ner,parse,pos,sen

我想创建一个情绪分析程序,接收中文数据集,并确定是否有更多的正面、负面或中性陈述。下面的例子,我创建了一个英语情感分析(StanfordCorenlp),它完全符合我的要求,但采用中文

问题:

    Properties props = new Properties();
    props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");
    // gender,lemma,ner,parse,pos,sentiment,sspplit, tokenize
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

     // read some text in the text variable

    String sentimentText = "Fun day, isn't it?";
    String[] ratings = {"Very Negative","Negative", "Neutral", "Positive", "Very Positive"};
    Annotation annotation = pipeline.process(sentimentText);
    for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) {
     Tree tree = sentence.get(SentimentCoreAnnotations.AnnotatedTree.class);
     int score = RNNCoreAnnotations.getPredictedClass(tree);
     System.out.println("sentence:'"+ sentence + "' has a score of "+ (score-2) +" rating: " + ratings[score]);
     System.out.println(tree);
目前,我不知道如何改变上述代码,使其支持中文。我下载了中文的praser和segmenter并观看了演示。但是经过几天的努力,结果什么都没有。我也读过,它对英文版真的很有用。是否有任何电子书、教程或例子可以帮助我理解斯坦福NLP的中国情绪分析是如何工作的

提前感谢

PS:我不久前学过java,如果有一些事情我说得不对或做得不对,请原谅

我所研究的:


根据我的德语经验,以下是您需要做的:

  • 获取中文文本的语料库
  • 分析每个句子
  • 对生成的解析树进行二值化
  • 对于二值化解析树中的每个节点,提取该节点跨越的短语
  • 用情感标签注释每个短语:
    • 0:非常负面
    • 1:稍负
    • 2:中立
    • 3:略为积极
    • 4:非常积极
  • 使用类似的方法将标签应用于解析树。请注意,
    BuildBinarizedDataset
    是为英语语言设置的,将再次解析您的句子。我发现将标签应用于步骤3中预先存在的解析更为实际

  • 注释:要么自己做,要么使用众包服务,比如CrowdFlower。我发现CrowdFlower上的“情绪分析”模板很有用。

    即使我在处理同样的问题,也有问题。这就是我所做的:

    您需要更改属性以支持中文,如下所示:

    props.setProperty("customAnnotatorClass.segment","edu.stanford.nlp.pipeline.ChineseSegmenterAnnotator");
    
    
            props.setProperty("pos.model","edu/stanford/nlp/models/pos-tagger/chinese-distsim/chinese-distsim.tagger");
            props.setProperty("parse.model","edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz");
    
            props.setProperty("segment.model","edu/stanford/nlp/models/segmenter/chinese/ctb.gz");
            props.setProperty("segment.serDictionary","edu/stanford/nlp/models/segmenter/chinese/dict-chris6.ser.gz");
            props.setProperty("segment.sighanCorporaDict","edu/stanford/nlp/models/segmenter/chinese");
            props.setProperty("segment.sighanPostProcessing","true");
    
            props.setProperty("ssplit.boundaryTokenRegex","[.]|[!?]+|[。]|[!?]+");
    
    
            props.setProperty("ner.model","edu/stanford/nlp/models/ner/chinese.misc.distsim.crf.ser.gz");
            props.setProperty("ner.applyNumericClassifiers","false");
            props.setProperty("ner.useSUTime","false");
    
    但仍然存在的问题是,所使用的标记器仍然默认为PTBTokenizer(英语)

    对于西班牙语,相应的属性为: props.setProperty(“tokenize.language”、“es”); props.setProperty(“touction.model”、“src/international/西班牙语”)

    这对西班牙语很管用。注意,“tokenize.language”属性被设置为“es”。中国人没有这样的财产。我曾尝试将其设置为'ch','cn','zh','zh-cn',但没有任何效果。
    如果您继续,请告诉我。

    亚马逊mechanical Turk也可用于注释
            props.setProperty("pos.model","src/models/pos-tagger/spanish/spanish-distsim.tagger");
    
    
            props.setProperty("ner.model","src/models/ner/spanish.ancora.distsim.s512.crf.ser.gz");
            props.setProperty("ner.applyNumericClassifiers","false");
            props.setProperty("ner.useSUTime","false");
    
            props.setProperty("parse.model","src/models/lexparser/spanishPCFG.ser.gz");