Как выделить запрос вместо выделения результатов поиска в lucene.net?

Я много ищу для этого, но я не мог найти никакого решения до сих пор. У меня большой запрос с комбинацией поиска близости. Мне нужно выяснить, где находится точное местоположение результатов в запросе. Например, частью запроса является "больница"~2 "readmissio"~2 . Теперь Lucene извлекает правильные документы, и один из них содержит правильное значение "повторная госпитализация", но как я могу выделить "readmissio" в запросе на "повторную госпитализацию" из документа. Есть некоторый обходной путь, такой как Левенштейн, но из-за огромного количества поиска это не практично, я надеюсь, что в lucene есть какое-то решение, чтобы выяснить положение извлеченных данных из запроса? Пожалуйста посоветуй.

    string newQueryString = "";
    string querystring = "To determine whether high performing hospitals with low 30 day risk standardized hospital readmissio rates have a lower proportion of readmission";
    string[] tokens = NLP.Tokenize(querystring);
    for (int i = 0; i < tokens.Length; i++)
    {
        string token = tokens[i];
        token = "\"" + token + "\"" + "~" + 2;

        // add token to new string expression
        newQueryString = newQueryString + " " + token;
    }

    query = MultiFieldQueryParser.Parse(Lucene.Net.Util.Version.LUCENE_CURRENT,
    new string[] { newQueryString }
    , new string[] { "TERM" },
    selectedAnalyzer);



    TopDocs tp = indexSearcher.Search(query, 1);
    int max = tp.TotalHits;

    List<Lucene.Net.Documents.Document> ids = new List<Lucene.Net.Documents.Document>();
    TopScoreDocCollector collector = TopScoreDocCollector.Create(max+1, true);
    indexSearcher.Search(query, collector);
    ScoreDoc[] hits = collector.TopDocs().ScoreDocs;
    for (int i = 0; i < hits.Length; i++)
    {

        int docId = hits[i].Doc;
        Lucene.Net.Documents.Document doc = indexSearcher.Doc(docId);
        string concept = doc.GetFieldable("TERM").StringValue;


        string[] contentTerms = NLP.Tokenize(querystring);
        ITermFreqVector tfvector = reader.GetTermFreqVector(docId, "TERM");
        TermPositionVector tpvector = (TermPositionVector)tfvector;

        for (int k = 0; k < contentTerms.Length; k++)
        {
            string[] terms = tfvector.GetTerms();
            int termidx = tfvector.IndexOf(contentTerms[k].Trim()); /// How to have readmission/readmissions here????? 
            int[] termposx = tpvector.GetTermPositions(termidx);
            TermVectorOffsetInfo[] tvoffsetinfo = tpvector.GetOffsets(termidx);

            int offsetStart = 0;
            int offsetEnd = 0;
            List<Tokens> conceptList = new List<Tokens>();
            for (int j = 0; j < tvoffsetinfo.Length; j++)
            {
                offsetStart = tvoffsetinfo[j].StartOffset;
                offsetEnd = tvoffsetinfo[j].EndOffset;
                string key = concept.Substring(offsetStart, offsetEnd - offsetStart);
                //////////////// Code continue////////////////
            }

        }
    }

поскольку это показывает, как я могу выделить часть "redamissi" в моей строке запроса для понятия "госпитализация".??? или в другом примере, если у меня есть права на чтение в моем запросе, как я могу выделить его для извлеченного значения "повторного допуска" или "допуска"???

0 ответов

Другие вопросы по тегам