0

검색 엔진 (Java J2ee, Hibernate, Hibernate Search 및 Lucene)에서 작업하고 있습니다. 나는 문서 내용을 분석한다. 내 시스템은 모두 정상이지만 문제는 계속되고 있습니다. 분석기의 선택!프랑스어 및 프로그래밍 언어에 적합한 분석기를 선택하십시오.

내 문서는 프랑스어로되어 있으며 연구가 프랑스어로되어있어 중요합니다. 그러나 내 검색 엔진은 (Java, COBOL, C, C#, C++ 등의) 프로그래밍 언어 이름을 검색 할 수 있어야합니다.

지금 Lucene의 프랑스어 분석기를 사용하고 있습니다. 용어 "C", "C++", "C#"에 대한 요청 결과. 나는 "C"또는 "C++"또는 "C#"] => "C"를 갖고 싶지만 => ""

나는 실제로 이러한 기술에 대한 초보자이며, 어떤 분석기를 사용해야하는지 또는 특정 분석기를 구현해야하는지 알고 있어야합니다.

(나는 이전 버전 인 ... 3.0.0.GA (최대 절전 모드 검색)을 사용하고 있으며 버전을 변경할 수 없음).

답변

0

FrenchAnalyzer.FRENCH_STOP_WORDS 참조

Thanxs는 "C"는 프랑스 정지 단어입니다. 적절한 FrenchAnalyzer constructor을 통해 자신 만의 정지 세트를 정의 할 수 있습니다.

기본 세트에서 시작하여 자신을 정의 할 때 바람직하지 않은 중지 단어 만 제거 할 수 있습니다. 전체 기본 프랑스어 중지 세트는 다음과 같습니다.

"a", "afin", "ai", "ainsi", "après", "attendu", "au", "aujourd", "auquel", "aussi", 
"autre", "autres", "aux", "auxquelles", "auxquels", "avait", "avant", "avec", "avoir", 
"c", "car", "ce", "ceci", "cela", "celle", "celles", "celui", "cependant", "certain", 
"certaine", "certaines", "certains", "ces", "cet", "cette", "ceux", "chez", "ci", 
"combien", "comme", "comment", "concernant", "contre", "d", "dans", "de", "debout", 
"dedans", "dehors", "delà", "depuis", "derrière", "des", "désormais", "desquelles", 
"desquels", "dessous", "dessus", "devant", "devers", "devra", "divers", "diverse", 
"diverses", "doit", "donc", "dont", "du", "duquel", "durant", "dès", "elle", "elles", 
"en", "entre", "environ", "est", "et", "etc", "etre", "eu", "eux", "excepté", "hormis", 
"hors", "hélas", "hui", "il", "ils", "j", "je", "jusqu", "jusque", "l", "la", "laquelle", 
"le", "lequel", "les", "lesquelles", "lesquels", "leur", "leurs", "lorsque", "lui", "là", 
"ma", "mais", "malgré", "me", "merci", "mes", "mien", "mienne", "miennes", "miens", "moi", 
"moins", "mon", "moyennant", "même", "mêmes", "n", "ne", "ni", "non", "nos", "notre", 
"nous", "néanmoins", "nôtre", "nôtres", "on", "ont", "ou", "outre", "où", "par", "parmi", 
"partant", "pas", "passé", "pendant", "plein", "plus", "plusieurs", "pour", "pourquoi", 
"proche", "près", "puisque", "qu", "quand", "que", "quel", "quelle", "quelles", "quels", 
"qui", "quoi", "quoique", "revoici", "revoilà", "s", "sa", "sans", "sauf", "se", "selon", 
"seront", "ses", "si", "sien", "sienne", "siennes", "siens", "sinon", "soi", "soit", 
"son", "sont", "sous", "suivant", "sur", "ta", "te", "tes", "tien", "tienne", "tiennes", 
"tiens", "toi", "ton", "tous", "tout", "toute", "toutes", "tu", "un", "une", "va", "vers", 
"voici", "voilà", "vos", "votre", "vous", "vu", "vôtre", "vôtres", "y", "à", "ça", "ès", 
"été", "être", "ô" 
0

내 솔루션에 만족하지 않아서 돌아 왔습니다 (작동하지 않음 ...). StopWords 목록을 수정 ("c"단어는 사용하지 않음)하고 줄기 제외 목록에 ("C", "C++", "C#") 넣었습니다. 스템 제외 목록을 설정하기 위해 생성자를 수정했습니다. 인덱스의 파일로 내 수업에서

내가있어 : 쿼리가 키워드 C, C++, C#을 위해,

// I've verified my custom constructor was called 
@Analyzer(impl = CustomFrenchAnalyzer.class) 
... 

나는 내 사용자 지정 분석기로 구성 쿼리의 인쇄를 작성하고 루씬에 보내 SContent : c (C, C++ 또는 C#은 내가 좋아하지 않습니다.)

누군가가 알고 있다면 ?? 여기

내 CustomFrenchAnalyzer 클래스입니다 :

public class CustomFrenchAnalyzer extends Analyzer { 

protected static final Log LOG = LogFactory.getLog(CustomFrenchAnalyzer.class); 
/** 
* Extended list of custom French stopwords (Without "c"). 
*/ 
public final static String[] FRENCH_STOP_WORDS = { "a", "afin", "ai", "ainsi", "après", "attendu", "au", "aujourd", "auquel", "aussi", "autre", "autres", "aux", "auxquelles", "auxquels", "avait", 
     "avant", "avec", "avoir", "car", "ce", "ceci", "cela", "celle", "celles", "celui", "cependant", "certain", "certaine", "certaines", "certains", "ces", "cet", "cette", "ceux", "chez", 
     "ci", "combien", "comme", "comment", "concernant", "contre", "d", "dans", "de", "debout", "dedans", "dehors", "delà", "depuis", "derrière", "des", "désormais", "desquelles", "desquels", 
     "dessous", "dessus", "devant", "devers", "devra", "divers", "diverse", "diverses", "doit", "donc", "dont", "du", "duquel", "durant", "dès", "elle", "elles", "en", "entre", "environ", 
     "est", "et", "etc", "etre", "eu", "eux", "excepté", "hormis", "hors", "hélas", "hui", "il", "ils", "j", "je", "jusqu", "jusque", "l", "la", "laquelle", "le", "lequel", "les", 
     "lesquelles", "lesquels", "leur", "leurs", "lorsque", "lui", "là", "ma", "mais", "malgré", "me", "merci", "mes", "mien", "mienne", "miennes", "miens", "moi", "moins", "mon", "moyennant", 
     "même", "mêmes", "n", "ne", "ni", "non", "nos", "notre", "nous", "néanmoins", "nôtre", "nôtres", "on", "ont", "ou", "outre", "où", "par", "parmi", "partant", "pas", "passé", "pendant", 
     "plein", "plus", "plusieurs", "pour", "pourquoi", "proche", "près", "puisque", "qu", "quand", "que", "quel", "quelle", "quelles", "quels", "qui", "quoi", "quoique", "revoici", "revoilà", 
     "s", "sa", "sans", "sauf", "se", "selon", "seront", "ses", "si", "sien", "sienne", "siennes", "siens", "sinon", "soi", "soit", "son", "sont", "sous", "suivant", "sur", "ta", "te", "tes", 
     "tien", "tienne", "tiennes", "tiens", "toi", "ton", "tous", "tout", "toute", "toutes", "tu", "un", "une", "va", "vers", "voici", "voilà", "vos", "votre", "vous", "vu", "vôtre", "vôtres", 
     "y", "à", "ça", "ès", "été", "être", "ô" }; 

/** 
* Contains the stopwords used with the StopFilter. 
*/ 
private Set stoptable = new HashSet(); 
/** 
* Contains words that should be indexed but not stemmed. 
*/ 
private Set excltable = new HashSet<String>(Arrays.asList("C", "C++", "C#")); 
private String[] exclListe = { "C", "C++", "C#" }; 

/** 
* Builds an analyzer with the default stop words ({@link #FRENCH_STOP_WORDS}). 
*/ 
public CustomFrenchAnalyzer() { 
    setStemExclusionTable(exclListe); 
    stoptable = StopFilter.makeStopSet(FRENCH_STOP_WORDS); 
} 

/** 
* Builds an analyzer with the given stop words. 
*/ 
public CustomFrenchAnalyzer(String[] stopwords) { 
    stoptable = StopFilter.makeStopSet(stopwords); 
} 

/** 
* Builds an analyzer with the given stop words. 
* 
* @throws IOException 
*/ 
public CustomFrenchAnalyzer(File stopwords) throws IOException { 
    stoptable = new HashSet(WordlistLoader.getWordSet(stopwords)); 
} 

/** 
* Builds an exclusionlist from an array of Strings. 
*/ 
public void setStemExclusionTable(String[] exclusionlist) { 
    excltable = StopFilter.makeStopSet(exclusionlist); 
} 

/** 
* Builds an exclusionlist from the words contained in the given file. 
* 
* @throws IOException 
*/ 
/* 
* public void setStemExclusionTable(File exclusionlist) throws IOException { excltable = new HashSet(WordlistLoader.getWordSet(exclusionlist)); } 
*/ 

/** 
* Creates a TokenStream which tokenizes all the text in the provided Reader. 
* 
* @return A TokenStream build from a StandardTokenizer filtered with StandardFilter, StopFilter, FrenchStemFilter and LowerCaseFilter 
*/ 
public final TokenStream tokenStream(String fieldName, Reader reader) { 

    if (fieldName == null) 
     throw new IllegalArgumentException("fieldName must not be null"); 
    if (reader == null) 
     throw new IllegalArgumentException("reader must not be null"); 

    TokenStream result = new StandardTokenizer(reader); 
    result = new StandardFilter(result); 
    result = new StopFilter(result, stoptable); 
    result = new FrenchStemFilter(result, excltable); 
    // Convert to lowercase after stemming! 
    result = new LowerCaseFilter(result); 
    return result; 
} 
} 

감사