Cara Menggunakan SynonymMap Di CustomAnalayzer Lucene 6.2.0

Saya tidak ingin menulis kelas Analyzer saya sendiri. saya telah melihat fitur baru yang diberikan oleh Apache lucene CustomAnalyzer di mana Anda dapat Membuat Custom Analyzer Anda sendiri.

Analyzer ana = CustomAnalyzer.builder(Paths.get(index))
.withTokenizer(StandardTokenizerFactory.class).addTokenFilter(LowerCaseFilterFactory.class)
.addTokenFilter(StandardFilterFactory.class).build();

jadi di sini saya ingin menambahkan satu opsi lagi untuk addTokenFilter(SynonymFilter.class) di mana saya akan meneruskan nilai default ke penganalisis seperti synonymMap,tokenstream dan semuanya jadi saya hanya ingin Bertanya ..

addTokenFilter(StopFilterFactory.class, "ignoreCase", "false", "words", "stopwords.txt", "format", "wordset")

Saya telah melihat contoh ini dapat digunakan dengan cara yang sama seperti di sini StopFilter didefinisikan Apakah Mungkin menggunakan SynonymMap di dalam penganalisis khusus atau tidak ..dan jika Ya maka bagaimana melakukannya .. konstruktor untuk filter sinonim adalah seperti itu..

HashMap<String, String> synonymMap = new HashMap<String, String>(10);
    synonymMap.put("synonyms", "Facebook");

saya melakukannya seperti ini

 SynonymMap.Builder builder = new SynonymMap.Builder(true);
    builder.add(new CharsRef("Facebook"), new CharsRef("YearBook,FaceB00k"), true);
    builder.add(new CharsRef("Facebook1"), new CharsRef("Fraud"), false);
    builder.add(new CharsRef("Suzie"), new CharsRef("Susan"), false);
    SynonymMap map = null;
    try {
        map = builder.build();
    } catch (IOException e) {
        e.printStackTrace();
    }
    Analyzer ana = CustomAnalyzer.builder(Paths.get(index))
            .withTokenizer(StandardTokenizerFactory.class)
            .addTokenFilter(StandardFilterFactory.class)
            .addTokenFilter(LowerCaseFilterFactory.class)
            .addTokenFilter(SynonymFilterFactory.class,synonymMap)
            .build();

itu memberi saya kesalahan seperti ini

Exception in thread "main" java.io.IOException: Resource not found: Facebook
at org.apache.lucene.analysis.util.ClasspathResourceLoader.openResource(ClasspathResourceLoader.java:67)

Terima kasih sebelumnya..


person Prakhar Nigam    schedule 29.12.2017    source sumber


Jawaban (1)


Jalur yang diteruskan ke builder bukanlah direktori indeks, tetapi tempat ia harus mencari sumber daya konfigurasi untuk penganalisis ini. Argumen kedua dari addTokenFilter adalah daftar parameter, bukan pemetaan sinonim.

Apa yang ingin Anda lakukan adalah memasukkan daftar sinonim Anda ke dalam file di direktori yang disebutkan di atas, dan memasukkan nama file itu sebagai parameter "sinonim" dalam panggilan addTokenFilter Anda (serta parameter lain yang mungkin Anda perlukan).

person femtoRgon    schedule 29.12.2017