2017-10-05 5 views
0

왜 myCategorizer.categorize(); String [] 아파치 opennlp 1.8 대신에 아파치 OpenNLP 버전 1.5와 같은 문자열이 필요합니까? 배열 대신 별도의 문자열을 확인하고 싶기 때문에.문서 분류기 openNLP - 범주화 메서드

public void trainModel() 
    { 
     InputStream dataIn = null; 
     try 
     {; 
      dataIn = new FileInputStream("D:/training.txt"); 
      ObjectStream lineStream = new PlainTextByLineStream(dataIn, "UTF-8"); 
      ObjectStream sampleStream = new DocumentSampleStream(lineStream); 
      // Specifies the minimum number of times a feature must be seen 
      int cutoff = 2; 
      int trainingIterations = 30; 
      model = DocumentCategorizerME.train("NL", sampleStream, cutoff,trainingIterations); 


     } 

     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

     finally 
     { 
      if (dataIn != null) 
      { 
       try 
       { 
        dataIn.close(); 
       } 
       catch (IOException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 


public void classifyNewTweet(String tweet) 
{ 
    DocumentCategorizerME myCategorizer = new DocumentCategorizerME(model); 
    double[] outcomes = myCategorizer.categorize(tweet); 
    String category = myCategorizer.getBestCategory(outcomes); 

    if (category.equalsIgnoreCase("1")) 
    { 
     System.out.println("The tweet is positive :) "); 
    } 
    else 
    { 
     System.out.println("The tweet is negative :("); 
    } 
} 

답변

0

OpenNLP 1.5 이전에는 DocumentCatagorizer의 첫 번째 작업은 문자열을 단어로 토큰 화하는 것이 었습니다. 처음에는 이것이 쉽지만 기본 WhitespaceTokenizer 대신 최대 엔트로피 토크 나이저를 사용하는 것이 좋습니다. 토크 나이저는 분류에 큰 영향을 줄 수 있습니다. 사용자가 자신의 선택에 따라 토크 나이저를 선택할 수 있도록 API를 변경하면 문제가 완화됩니다. 그냥 추가하십시오

Tokenizer tokenizer = WhitespaceTokenizer.INSTANCE; 
... 
String[] tokens = tokenizer.tokenize(tweet); 
double[] outcomes = myCategorizer.categorize(tweet); 
... 

그러면 문제가 해결됩니다. 통계 토큰 라이저 (TokenizerME 참조) 또는 SimpleTokenizer를 사용할 수도 있습니다.

희망 하시겠습니까?