2012-11-10 4 views
0

Lucene API를 사용하여 문장에서 ngrams를 추출하고 싶습니다. 그러나 나는 특이한 문제를 겪고있는 것처럼 보인다. JavaDoc에는 NGramTokenizer라는 클래스가 있습니다. 3.6.1 및 4.0 API를 모두 다운로드했으며이 클래스의 흔적을 볼 수 없습니다. NGramTokenizer 경로 org.apache.lucene.analysis.NGramTokenizer에 나타납니다 문서에서Java Lucene Ngrams

NGramTokenizer myTokenizer; 

: 나는 다음을 시도 할 때 예를 들어 나는 기호 NGramTokenizer을 찾을 수 없다는 오류가 발생합니다. 나는 내 컴퓨터 어디서나 이것을 보지 못한다. 3.6.1 및 4.0 API 모두에서 발생하는 다운로드 또는 기타 오류가 발생하지 않았을 것 같습니다.

  1. NGramTokenizer 클래스는 어떻게 구할 수 있습니까?
  2. 나는 내 프로젝트

답변

3

당신은 잘못된 항아리를 사용하여 루씬 코어-3.6.1.jar를 추가했다. 그것은 안으로있다

lucene-analyzers-3.6.1.jar 

org.apache.lucene.analysis.ngram.NGramTokenizer 
0

나는 여기에 도움이 필요하다 일반적으로 사용하는 유틸리티 방법입니다.

<dependency> 
     <groupId>org.apache.lucene</groupId> 
     <artifactId>lucene-core</artifactId> 
     <version>4.10.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.lucene</groupId> 
     <artifactId>lucene-analyzers-common</artifactId> 
     <version>4.10.3</version> 
    </dependency> 
:

private Set<String> generateNgrams(String sentence, int ngramCount) { 
    StringReader reader = new StringReader(sentence); 
    Set<String> ngrams = new HashSet<>(); 

    //use lucene's shingle filter to generate the tokens 
    StandardTokenizer source = new StandardTokenizer(reader); 
    TokenStream tokenStream = new StandardFilter(source); 
    TokenFilter sf = null; 

    //if only unigrams are needed use standard filter else use shingle filter 
    if(ngramCount == 1){ 
     sf = new StandardFilter(tokenStream); 
    } 
    else{ 
     sf = new ShingleFilter(tokenStream); 
     ((ShingleFilter)sf).setMaxShingleSize(ngramCount); 
    } 

    CharTermAttribute charTermAttribute = sf.addAttribute(CharTermAttribute.class); 
    try { 
     sf.reset(); 
     while (sf.incrementToken()) { 
      String token = charTermAttribute.toString().toLowerCase(); 
      ngrams.add(token); 
     } 
     sf.end(); 
     sf.close(); 
    } catch (IOException ex) { 
     // System.err.println("Scream and cry as desired"); 
     ex.printStackTrace(); 
    } 
    return ngrams; 
} 

메이븐 루씬에 필요한 종속성이 있습니다 (I가 낮거나 높은 버전에서 테스트하지 않았다) 루씬 4.10와 함께 작동해야