Как вернуть соответствующую строку, которая соответствует нашему ключевому слову поиска в whoosh?

Допустим, данный файл a.txt:

hello world
good morning world
good night world

Учитывая ключевое слово, которое я хочу найти, — morning, я хочу использовать библиотеку whoosh python, чтобы вернуть строку, которая соответствует ключевому слову morning в текстовом файле a.txt. Значит, вернется good morning world. Как я могу этого добиться?

Обновление: вот моя схема:

schema = Schema(title=TEXT(stored=True),
              path=ID(stored=True),
              content=TEXT(stored=True))

затем я добавляю писатель add_document в поле содержимого

Какова цель использования библиотеки whoosh?

Anna Semjén 11.12.2020 12:22

Можете ли вы показать свою схему индекса.

pjcunningham 11.12.2020 12:40

@pjcunningham обновлено

Victor Vic 15.12.2020 07:24

@AnnaSemjén интегрировать с кодом Python проще?

Victor Vic 15.12.2020 07:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
216
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проиндексируйте текстовый файл построчно и сохраните номер строки как поле NUMERIC, а всю строку как поле ID (хранение стоит дешево, верно!).

Что-то вроде следующего (не проверено):

schema = Schema(
    title=TEXT(stored=True),
    path=ID(stored=True),
    content=TEXT(stored=True),
    line_number=NUMERIC(int, 32, stored=True, signed=False),
    line_text=ID(stored=True),
)


ix = index.open_dir("index")
writer = ix.writer()

with open('a.txt') as f:
    for line_number, line in enumerate(f):
        writer.add_document(
            title='This is a title',
            path='a.txt',
            content=line,
            line_number=line_number,
            line_text=line,
        )

Очевидно, вы можете расширить это для индексации нескольких текстовых файлов:

files_to_index = [
    {'title': 'Title A', 'path': 'a.txt'},
    {'title': 'Title B', 'path': 'b.txt'},
    {'title': 'Title C', 'path': 'c.txt'},
]

ix = index.open_dir("index")
writer = ix.writer()


for file_to_index in files_to_index:

    with open(file_to_index['path']) as f:
        for line_number, line in enumerate(f):
            writer.add_document(
                title=file_to_index['title'],
                path=file_to_index['path'],
                content=line,
                line_number=line_number,
                line_text=line,
            )

Я так понимаю, у нас нет возможности уместить все данные в один writer.add_document?

Victor Vic 21.12.2020 04:44

@VictorVic - по какой причине вы хотите сопоставить один текстовый файл с одним документом?

pjcunningham 21.12.2020 11:01

просто думаю о более быстром решении при условии, что у меня есть несколько папок и файлов, которые нужно добавить в средство записи, и я хочу искать только определенное ключевое слово из определенного файла напрямую, ха-ха.

Victor Vic 21.12.2020 11:27

@VictorVic - вы можете указать путь как часть поискового запроса. См. Результаты фильтрации в документации.

pjcunningham 21.12.2020 12:24

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