2016-04-23 4 views
1

Ich bin neu in Lucene und ich versuche, Abfrage Expansion zu tun.Anfrage Erweiterung Lucene

Ich habe auf diese beiden Beiträge verwiesen (first, second) und ich habe es geschafft, den Code in einer Weise wiederzuverwenden, die Version 6.0.0 entspricht, da die vorherige Version veraltet ist.

Das Problem ist, entweder bekomme ich keine Ergebnisse oder ich habe nicht auf die Ergebnisse (erweiterte Abfragen) angemessen zugegriffen.

Hier ist mein Code:

import com.sun.corba.se.impl.util.Version; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.Reader; 
import java.io.StringReader; 
import java.io.UnsupportedEncodingException; 
import org.apache.lucene.analysis.standard.StandardAnalyzer; 
import java.net.URLDecoder; 
import java.net.URLEncoder; 
import java.text.ParseException; 
import org.apache.lucene.analysis.Analyzer; 
import org.apache.lucene.analysis.TokenStream; 
import org.apache.lucene.analysis.Tokenizer; 
import org.apache.lucene.analysis.core.LowerCaseFilter; 
import org.apache.lucene.analysis.standard.ClassicTokenizer; 
import org.apache.lucene.analysis.standard.StandardFilter; 
import org.apache.lucene.analysis.synonym.SynonymFilter; 
import org.apache.lucene.analysis.synonym.SynonymMap; 
import org.apache.lucene.analysis.synonym.WordnetSynonymParser; 
import org.apache.lucene.analysis.util.CharArraySet; 
import org.apache.lucene.util.*; 


public class Graph extends Analyzer 
{ 

    protected static TokenStreamComponents createComponents(String fieldName, Reader reader) throws ParseException{ 
     System.out.println("1"); 
    // TODO Auto-generated method stub 
    Tokenizer source = new ClassicTokenizer(); 

    source.setReader(reader); 
    TokenStream filter = new StandardFilter(source); 

    filter = new LowerCaseFilter(filter); 
    SynonymMap mySynonymMap = null; 

    try { 

     mySynonymMap = buildSynonym(); 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    filter = new SynonymFilter(filter, mySynonymMap, false);  

    return new TokenStreamComponents(source, filter); 

} 

private static SynonymMap buildSynonym() throws IOException, ParseException 
{ System.out.print("build"); 
    File file = new File("wn\\wn_s.pl"); 

    InputStream stream = new FileInputStream(file); 

    Reader rulesReader = new InputStreamReader(stream); 
    SynonymMap.Builder parser = null; 
    parser = new WordnetSynonymParser(true, true, new StandardAnalyzer(CharArraySet.EMPTY_SET)); 
    System.out.print(parser.toString()); 
    ((WordnetSynonymParser) parser).parse(rulesReader); 
    SynonymMap synonymMap = parser.build(); 
    return synonymMap; 
} 

public static void main (String[] args) throws UnsupportedEncodingException, IOException, ParseException 
{ 
Reader reader = new FileReader("C:\\input.txt"); // here I have the queries that I want to expand 
TokenStreamComponents TSC = createComponents("" , new StringReader("some text goes here")); 
**System.out.print(TSC); //How to get the result from TSC????** 
} 

    @Override 
    protected TokenStreamComponents createComponents(String string) 
    { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 
} 

Bitte vorschlagen, wie mir die erweiterten Suchanfragen zugreifen zu helfen!

Antwort

1

Also, versuchen Sie nur herauszufinden, wie Sie die Begriffe aus der TokenStreamComponents in Ihrer Hauptmethode durchlaufen?

Etwas wie folgt aus:

TokenStreamComponents TSC = createComponents("" , new StringReader("some text goes here")); 
TokenStream stream = TSC.getTokenStream(); 
CharTermAttribute termattr = stream.addAttribute(CharTermAttribute.class); 
stream.reset(); 
while (stream.incrementToken()) { 
    System.out.println(termattr.toString()); 
} 
+0

Dank femtoRgon Das ist genau das, was ich wollte! – Manar