2016-09-22 3 views
0

주로 Python과 Java를 처음 사용합니다. 그러나 Java 프로그램을 작성하여 Python Python 패키지를 통해 Python으로 작동 시키려고합니다. 다음의 프로그램은 제가 예를 통해 적용한 것입니다. 컴파일 오류가 발생했습니다. 빛 좀 비켜 주시겠습니까? 나는 그것이 기본 오류라고 확신한다. 감사.Python의 py4j를 통해 Java Corenlp의 정서 점수 프로그램에서 컴파일 오류가 발생했습니다.

> compile error: incompatible type: SimpleMatrix cannot be converted to String: return senti_scores. 
> intended input in Python: 
app = CoreNLPSentiScore() 
app.findSentiment("I like this book") 
intended output: matrix: Type = dense , numRows = 5 , numCols = 1 
0.016 
0.037 
0.132 
0.618 
0.196 

import java.util.List; 
import java.util.Properties; 
import edu.stanford.nlp.ling.CoreAnnotations; 
import edu.stanford.nlp.neural.rnn.RNNCoreAnnotations; 
import edu.stanford.nlp.pipeline.Annotation; 
import edu.stanford.nlp.pipeline.StanfordCoreNLP; 
import edu.stanford.nlp.sentiment.SentimentCoreAnnotations.SentimentAnnotatedTree; 
import edu.stanford.nlp.trees.Tree; 
import edu.stanford.nlp.util.ArrayCoreMap; 
import edu.stanford.nlp.util.CoreMap; 
import py4j.GatewayServer; 
import org.ejml.simple.SimpleMatrix; 


public class CoreNLPSentiScore { 
static StanfordCoreNLP pipeline; 

    public static void init() { 
     Properties props = new Properties(); 
     props.setProperty("annotators", "tokenize, ssplit, parse, sentiment"); 
     pipeline = new StanfordCoreNLP(props); 

    } 

    public static void main(String[] args) { 
     CoreNLPSentiScore app = new CoreNLPSentiScore(); 
     // app is now the gateway.entry_point 
     GatewayServer server = new GatewayServer(app); 
     server.start(); 
    } 

    //public static void main(String tweet) { 
    //public static String findSentiment(String tweet) { 
    public String findSentiment(String tweet) { 
    //String SentiReturn = "2"; 
    //String[] SentiClass ={"very negative", "negative", "neutral", "positive", "very positive"}; 

    //Sentiment is an integer, ranging from 0 to 4. 
    //0 is very negative, 1 negative, 2 neutral, 3 positive and 4 very positive. 
    //int sentiment = 2; 
     SimpleMatrix senti_score = new SimpleMatrix(); 
     if (tweet != null && tweet.length() > 0) { 
      Annotation annotation = pipeline.process(tweet); 

      List<CoreMap> sentences = annotation.get(CoreAnnotations.SentencesAnnotation.class); 
      if (sentences != null && sentences.size() > 0) { 

       ArrayCoreMap sentence = (ArrayCoreMap) sentences.get(0);     
       //Tree tree = sentence.get(SentimentAnnotatedTree.class); 
       Tree tree = sentence.get(SentimentAnnotatedTree.class); 
       senti_score = RNNCoreAnnotations.getPredictions(tree);    

       //SentiReturn = SentiClass[sentiment]; 
      } 
     } 
     //System.out.println(senti_score); 
     return senti_score; 
     //System.out.println(senti_score); 
    } 

} 

답변

1

자바는 객체 지향 프로그램이지만 모든 것이 객체로 간주되는 파이썬과 비슷하지 않습니다.

위에서 언급 한 프로그램에서. findsentiment가 SimpleMatrix를 리턴하는 메소드가 있지만 메소드 선언에서 String입니다.

솔루션 - 당신은 당신의 클래스 SimpleMatrix의 toString 메소드()를 오버라이드 (override)하는과 senti_score.toString을 반환 senti_score 반환하면서()

+0

감사 할 수 있습니다! 그것은 지금처럼 컴파일됩니다. 그러나 나는 Python에서 nullpointerexception을 가지고있다. 또 다른 질문을 제기 할 것이다. –