Java 斯坦福NLP-汉语情感分析
我想创建一个情绪分析程序,接收中文数据集,并确定是否有更多的正面、负面或中性陈述。下面的例子,我创建了一个英语情感分析(StanfordCorenlp),它完全符合我的要求,但采用中文 问题: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
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");