Совпадение запроса в токене в Whoosh - PullRequest
0 голосов
/ 06 июля 2018

Я хочу применить поиск с помощью Whoosh к тексту. Сейчас это работает только для точных совпадений токенов (разделенных пробелами). Я также хотел бы сопоставить внутри токена (например: матч добавить в токене " добавлено "). Я знаю о происхождении и вариациях, но это не то, что я ищу. Спасибо за вашу помощь!

from whoosh.index import create_in
from whoosh.fields import Schema, TEXT, KEYWORD, ID, STORED
from whoosh.qparser import QueryParser

schema = Schema(title=TEXT(), content=TEXT())
indexpath = (r"C:\Users\rettenma\.jupyter\JupyterWork"+
        r"folder\Python_Repository\bin\index")
ix = create_in(indexpath, schema)
writer = ix.writer()
writer.add_document(title=u"First document",
                content=u"This is the first document we've added!")
writer.commit()

with ix.searcher() as searcher:
    query = QueryParser("content", ix.schema).parse("add")
    results = searcher.search(query, terms=True)
    print(results[0])

Это вызовет ошибку из-за пустых результатов.

1 Ответ

0 голосов
/ 06 июля 2018

http://whoosh.readthedocs.io/en/latest/api/query.html#whoosh.query.Regex

Похоже, вам нужны регулярные выражения.

[ИЗМЕНИТЬ НАЧАТЬ]

Надеюсь, это поможет:

https://regexr.com/3s2ta

Выше приведен первый пример захвата слов, описанных ОП. Однако я заметил, что есть проблема в том, что пример Regex также будет захватывать любые слова, содержащие «add», в том числе Addendum, Daddy и так далее. Получив уведомления об этом, я исправил и переписал пример Regex, ссылка здесь ниже:

https://regexr.com/3sg8q

[РЕДАКТИРОВАНИЕ ОТДЕЛКА]

Это пример с дополнительным тестированием, чтобы убедиться, что вы можете поймать все варианты слова «добавить», например, «добавить» / «добавляет» / «добавлен» / «дополнительный». По сути, все, что содержит «добавить» + остальное слово.

...