Squeak.ru - шаблоны программирования

Как использовать StandardAnalyzer с TermQuery?

Я пытаюсь создать что-то похожее на то, что делает QueryParser в lucene, но без парсера, то есть запустить строку через StandardAnalyzer, токенизировать ее и использовать TermQuery: s в BooleanQuery для создания запроса. Моя проблема в том, что я получаю только Token: s от StandardAnalyzer, а не Term: s. Я могу преобразовать токен в термин, просто извлекая из него строку с помощью Token.term (), но это только для 2.4.x и кажется наоборот, потому что мне нужно добавить поле во второй раз. Как правильно создать TermQuery с помощью StandardAnalyzer?

Я использую pylucene, но, думаю, ответ такой же для Java и т. Д. Вот код, который я придумал:

from lucene import *
def term_match(self, phrase):
    query = BooleanQuery()
    sa = StandardAnalyzer()               
    for token in sa.tokenStream("contents", StringReader(phrase)):
        term_query = TermQuery(Term("contents", token.term())
        query.add(term_query), BooleanClause.Occur.SHOULD)
07.09.2009

Ответы:


1

Установленный способ получения текста токена - token.termText() - этот API существует всегда.

И да, вам нужно указать имя поля как для Analyzer, так и для Term; Думаю, это считается нормальным. 8-)

07.09.2009
  • Согласно документации API, token.termText () устарел, и они указывают мне вместо этого использовать что-то вроде token.termBuffer () [0: token.termLength ()], которое работает, но кажется еще более неудобным. 08.09.2009

  • 2

    Я столкнулся с той же проблемой, и, используя Lucene 2.9 API и Java, мой фрагмент кода выглядит так:

    final TokenStream tokenStream = new StandardAnalyzer(Version.LUCENE_29)
        .tokenStream( fieldName , new StringReader( value ) );
    final List< String > result = new ArrayList< String >();
    try {
    while ( tokenStream.incrementToken() ) {
      final TermAttribute term = ( TermAttribute ) tokenStream.getAttribute( TermAttribute.class );
      result.add( term.term() );
    }
    
    24.11.2010
    Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...