Search in sources :

Example 1 with AnalyzedQuestion

use of info.ephyra.questionanalysis.AnalyzedQuestion in project lucida by claritylab.

the class OpenEphyraCorpus method askFactoid.

/**
	 * Asks Ephyra a factoid question and returns up to <code>maxAnswers</code>
	 * results that have a score of at least <code>absThresh</code>. This method
	 * is optimized for the TREC evaluation: if the answer type cannot be
	 * determined and no answers are found, it simply returns a list of proper
	 * names.
	 * 
	 * @param question factoid question
	 * @param maxAnswers maximum number of answers
	 * @param absThresh absolute threshold for scores
	 * @return array of results
	 */
public Result[] askFactoid(String question, int maxAnswers, float absThresh) {
    // initialize pipeline
    initFactoidCorpus();
    // analyze question
    MsgPrinter.printAnalyzingQuestion();
    AnalyzedQuestion aq = QuestionAnalysis.analyze(question);
    // get corpus answers
    Result[] resultsCorp = runPipeline(aq, Integer.MAX_VALUE, Float.NEGATIVE_INFINITY);
    // get web answers and project them
    initFactoidWeb(resultsCorp);
    Result[] results = runPipeline(aq, maxAnswers, absThresh);
    // return results if any
    if (results.length > 0)
        return results;
    if (aq.getAnswerTypes().length == 0) {
        // assume that question asks for a proper name
        aq.setAnswerTypes(new String[] { "NEproperName" });
        // get corpus answers (only factoid answers)
        initFactoidCorpus();
        resultsCorp = runPipeline(aq, Integer.MAX_VALUE, 0);
        // get web answers and project them
        initFactoidWeb(resultsCorp);
        results = runPipeline(aq, maxAnswers, absThresh);
    }
    return results;
}
Also used : AnalyzedQuestion(info.ephyra.questionanalysis.AnalyzedQuestion) Result(info.ephyra.search.Result)

Example 2 with AnalyzedQuestion

use of info.ephyra.questionanalysis.AnalyzedQuestion in project lucida by claritylab.

the class OpenEphyraCorpus method askList.

/**
	 * Asks Ephyra a list question and returns results that have a score of at
	 * least <code>relThresh * top score</code>. This method is optimized for
	 * the TREC evaluation: if no answers are found, it simply returns a list
	 * of proper names.
	 * 
	 * @param question list question
	 * @param relThresh relative threshold for scores
	 * @return array of results
	 */
public Result[] askList(String question, float relThresh) {
    question = QuestionNormalizer.transformList(question);
    Result[] results = askFactoid(question, Integer.MAX_VALUE, 0);
    if (results.length == 0) {
        // assume that question asks for proper names
        AnalyzedQuestion aq = QuestionAnalysis.analyze(question);
        aq.setAnswerTypes(new String[] { "NEproperName" });
        // get corpus answers (only factoid answers)
        initFactoidCorpus();
        Result[] resultsCorp = runPipeline(aq, Integer.MAX_VALUE, 0);
        // get web answers and project them
        initFactoidWeb(resultsCorp);
        results = runPipeline(aq, Integer.MAX_VALUE, 0);
    }
    // get results with a score of at least relThresh * top score
    ArrayList<Result> confident = new ArrayList<Result>();
    if (results.length > 0) {
        float topScore = results[0].getScore();
        for (Result result : results) if (result.getScore() >= relThresh * topScore)
            confident.add(result);
    }
    return confident.toArray(new Result[confident.size()]);
}
Also used : ArrayList(java.util.ArrayList) AnalyzedQuestion(info.ephyra.questionanalysis.AnalyzedQuestion) Result(info.ephyra.search.Result)

Example 3 with AnalyzedQuestion

use of info.ephyra.questionanalysis.AnalyzedQuestion in project lucida by claritylab.

the class OpenEphyra method askFactoid.

/**
	 * Asks Ephyra a factoid question and returns up to <code>maxAnswers</code>
	 * results that have a score of at least <code>absThresh</code>.
	 * 
	 * @param question factoid question
	 * @param maxAnswers maximum number of answers
	 * @param absThresh absolute threshold for scores
	 * @return array of results
	 */
public Result[] askFactoid(String question, int maxAnswers, float absThresh) {
    // initialize pipeline
    initFactoid();
    // analyze question
    MsgPrinter.printAnalyzingQuestion();
    AnalyzedQuestion aq = QuestionAnalysis.analyze(question);
    // get answers
    Result[] results = runPipeline(aq, maxAnswers, absThresh);
    return results;
}
Also used : AnalyzedQuestion(info.ephyra.questionanalysis.AnalyzedQuestion) Result(info.ephyra.search.Result)

Example 4 with AnalyzedQuestion

use of info.ephyra.questionanalysis.AnalyzedQuestion in project lucida by claritylab.

the class OpenEphyraServer method askFactoid.

/**
	 * Asks Ephyra a factoid question and returns up to <code>maxAnswers</code>
	 * results that have a score of at least <code>absThresh</code>.
	 * 
	 * @param question factoid question
	 * @param maxAnswers maximum number of answers
	 * @param absThresh absolute threshold for scores
	 * @return array of results
	 */
public Result[] askFactoid(String question, int maxAnswers, float absThresh) {
    // initialize pipeline
    initFactoid();
    // analyze question
    MsgPrinter.printAnalyzingQuestion();
    AnalyzedQuestion aq = QuestionAnalysis.analyze(question);
    // get answers
    Result[] results = runPipeline(aq, maxAnswers, absThresh);
    return results;
}
Also used : AnalyzedQuestion(info.ephyra.questionanalysis.AnalyzedQuestion) Result(info.ephyra.search.Result)

Example 5 with AnalyzedQuestion

use of info.ephyra.questionanalysis.AnalyzedQuestion in project lucida by claritylab.

the class WebTermImportanceFilter method main.

public static void main(String[] args) {
    TEST_TARGET_GENERATION = true;
    MsgPrinter.enableStatusMsgs(true);
    MsgPrinter.enableErrorMsgs(true);
    // create tokenizer
    MsgPrinter.printStatusMsg("Creating tokenizer...");
    if (!OpenNLP.createTokenizer("res/nlp/tokenizer/opennlp/EnglishTok.bin.gz"))
        MsgPrinter.printErrorMsg("Could not create tokenizer.");
    //		LingPipe.createTokenizer();
    // create sentence detector
    //		MsgPrinter.printStatusMsg("Creating sentence detector...");
    //		if (!OpenNLP.createSentenceDetector("res/nlp/sentencedetector/opennlp/EnglishSD.bin.gz"))
    //			MsgPrinter.printErrorMsg("Could not create sentence detector.");
    //		LingPipe.createSentenceDetector();
    // create stemmer
    MsgPrinter.printStatusMsg("Creating stemmer...");
    SnowballStemmer.create();
    // create part of speech tagger
    MsgPrinter.printStatusMsg("Creating POS tagger...");
    if (!OpenNLP.createPosTagger("res/nlp/postagger/opennlp/tag.bin.gz", "res/nlp/postagger/opennlp/tagdict"))
        MsgPrinter.printErrorMsg("Could not create OpenNLP POS tagger.");
    //		if (!StanfordPosTagger.init("res/nlp/postagger/stanford/" +
    //				"train-wsj-0-18.holder"))
    //			MsgPrinter.printErrorMsg("Could not create Stanford POS tagger.");
    // create chunker
    MsgPrinter.printStatusMsg("Creating chunker...");
    if (!OpenNLP.createChunker("res/nlp/phrasechunker/opennlp/" + "EnglishChunk.bin.gz"))
        MsgPrinter.printErrorMsg("Could not create chunker.");
    // create named entity taggers
    MsgPrinter.printStatusMsg("Creating NE taggers...");
    NETagger.loadListTaggers("res/nlp/netagger/lists/");
    NETagger.loadRegExTaggers("res/nlp/netagger/patterns.lst");
    MsgPrinter.printStatusMsg("  ...loading models");
    //			MsgPrinter.printErrorMsg("Could not create OpenNLP NE tagger.");
    if (!StanfordNeTagger.isInitialized() && !StanfordNeTagger.init())
        MsgPrinter.printErrorMsg("Could not create Stanford NE tagger.");
    MsgPrinter.printStatusMsg("  ...done");
    WebTermImportanceFilter wtif = new TargetGeneratorTest(NO_NORMALIZATION);
    TRECTarget[] targets = TREC13To16Parser.loadTargets(args[0]);
    for (TRECTarget target : targets) {
        String question = target.getTargetDesc();
        // query generation
        MsgPrinter.printGeneratingQueries();
        String qn = QuestionNormalizer.normalize(question);
        // print normalized question string
        MsgPrinter.printNormalization(qn);
        // log normalized question string
        Logger.logNormalization(qn);
        String[] kws = KeywordExtractor.getKeywords(qn);
        AnalyzedQuestion aq = new AnalyzedQuestion(question);
        aq.setKeywords(kws);
        aq.setFactoid(false);
        Query[] queries = new BagOfWordsG().generateQueries(aq);
        for (int q = 0; q < queries.length; q++) queries[q].setOriginalQueryString(question);
        Result[] results = new Result[1];
        results[0] = new Result("This would be the answer", queries[0]);
        wtif.apply(results);
    }
}
Also used : Query(info.ephyra.querygeneration.Query) BagOfWordsG(info.ephyra.querygeneration.generators.BagOfWordsG) Result(info.ephyra.search.Result) TRECTarget(info.ephyra.trec.TRECTarget) AnalyzedQuestion(info.ephyra.questionanalysis.AnalyzedQuestion)

Aggregations

AnalyzedQuestion (info.ephyra.questionanalysis.AnalyzedQuestion)9 Result (info.ephyra.search.Result)8 Query (info.ephyra.querygeneration.Query)3 BagOfWordsG (info.ephyra.querygeneration.generators.BagOfWordsG)3 TRECTarget (info.ephyra.trec.TRECTarget)2 ArrayList (java.util.ArrayList)2 Predicate (info.ephyra.nlp.semantics.Predicate)1 Term (info.ephyra.questionanalysis.Term)1 Dictionary (info.ephyra.util.Dictionary)1 EOFException (java.io.EOFException)1 FileInputStream (java.io.FileInputStream)1 IOException (java.io.IOException)1 ObjectInputStream (java.io.ObjectInputStream)1