วิธีใช้ SynonymMap ใน CustomAnalayzer ของ Lucene 6.2.0

ฉันไม่ต้องการเขียนคลาส Analyzer ของตัวเอง ฉันได้เห็นคุณสมบัติใหม่ที่ได้รับจาก apache lucene CustomAnalyzer ซึ่งคุณสามารถสร้าง Custom Analyzer ของคุณเองได้

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

ดังนั้นที่นี่ฉันต้องการเพิ่มอีกหนึ่งตัวเลือกสำหรับ addTokenFilter(SynonymFilter.class) โดยที่ฉันจะส่งค่าเริ่มต้นไปยังตัววิเคราะห์เช่น synonymMap, tokenstream และทุกอย่าง ดังนั้นฉันแค่อยากจะถาม ..

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

ฉันได้เห็นตัวอย่างนี้เป็นไปได้ที่จะใช้ในลักษณะเดียวกับที่นี่ StopFilter ถูกกำหนดไว้ เป็นไปได้หรือไม่ที่จะใช้ SynonymMap ภายในตัววิเคราะห์ที่กำหนดเองหรือไม่ .. และถ้าใช่จะต้องทำอย่างไร .. ตัวสร้างสำหรับตัวกรองคำพ้องความหมายเป็นเช่นนั้น ..

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

ฉันกำลังทำเช่นนี้

 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();

มันทำให้ฉันมีข้อผิดพลาดเช่นนี้

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

ขอบคุณล่วงหน้า..


person Prakhar Nigam    schedule 29.12.2017    source แหล่งที่มา


คำตอบ (1)


เส้นทางที่ส่งผ่านไปยัง builder ไม่ใช่ไดเร็กทอรีดัชนี แต่เป็นตำแหน่งที่ควรค้นหาทรัพยากรการกำหนดค่าสำหรับตัววิเคราะห์นี้ อาร์กิวเมนต์ที่สองของ addTokenFilter คือรายการพารามิเตอร์ ไม่ใช่การจับคู่คำพ้องความหมาย

สิ่งที่คุณต้องการทำคือใส่รายการคำพ้องความหมายของคุณลงในไฟล์ในไดเร็กทอรีที่กล่าวถึงข้างต้น และส่งชื่อไฟล์นั้นเป็นพารามิเตอร์ "คำพ้องความหมาย" ในการเรียก addTokenFilter ของคุณ (รวมถึงพารามิเตอร์อื่น ๆ ที่คุณอาจต้องการ)

person femtoRgon    schedule 29.12.2017