2017-03-28 10 views
1

1 백만 개의 레이블이 지정된 문장의 데이터 세트가 있으며 최대 엔트로피를 통해 정서를 찾는 데 사용합니다. 각 전체 데이터 세트가 읽고있는 트윗에 대한자바에서 훈련 된 스탠포드 분류기 저장 및로드

public class MaximumEntropy { 

static ColumnDataClassifier cdc; 

public static float calMaxEntropySentiment(String text) { 
    initializeProperties(); 
    float sentiment = (getMaxEntropySentiment(text)); 
    return sentiment; 
} 

public static void initializeProperties() { 
    cdc = new ColumnDataClassifier(
      "\\stanford-classifier-2016-10-31\\properties.prop"); 
} 

public static int getMaxEntropySentiment(String tweet) { 

    String filteredTweet = TwitterUtils.filterTweet(tweet); 
    System.out.println("Reading training file"); 
    Classifier<String, String> cl = cdc.makeClassifier(cdc.readTrainingExamples(
      "\\stanford-classifier-2016-10-31\\labelled_sentences.txt")); 

    Datum<String, String> d = cdc.makeDatumFromLine(filteredTweet); 
    System.out.println(filteredTweet + " ==> " + cl.classOf(d) + " " + cl.scoresOf(d)); 
    // System.out.println("Class score is: " + 
    // cl.scoresOf(d).getCount(cl.classOf(d))); 
    if (cl.classOf(d) == "0") { 
     return 0; 
    } else { 
     return 4; 
    } 
} 
} 

내 데이터가 이제 0 또는 1을 표시하고이 데이터 세트의 크기를 고려하여 시간이 많이 걸리는 - : 나는 같은 스탠포드 분류를 사용하고 있습니다. 내 쿼리는 분류기를 처음으로 훈련시킨 다음 트윗의 정서를 찾을 때로드합니다. 나는이 접근법이 더 적은 시간이 걸릴 것이라고 생각한다. 내가 틀렸다면 나를 바로 잡아라. 다음 링크는 이것을 제공하지만 JAVA API에는 아무 것도 없습니다. Saving and Loading Classifier 도움을 주시면 감사하겠습니다.

답변

2

예; 가장 쉬운 방법은 Java의 기본 직렬화 메커니즘을 사용하여 분류자를 직렬화하는 것입니다.

Classifier<String, String> cl = IOUtils.readObjectFromFile(new File("/path/to/file"); 
+0

당신에게 너무 감사합니다

IOUtils.writeObjectToFile(classifier, "/path/to/file"); 

이 분류를 읽으려면 여기 유용한 도우미는 IOUtils 클래스 –