Допустим, данный файл 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 в поле содержимого
Можете ли вы показать свою схему индекса.
@pjcunningham обновлено
@AnnaSemjén интегрировать с кодом Python проще?
Проиндексируйте текстовый файл построчно и сохраните номер строки как поле 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
?
@VictorVic - по какой причине вы хотите сопоставить один текстовый файл с одним документом?
просто думаю о более быстром решении при условии, что у меня есть несколько папок и файлов, которые нужно добавить в средство записи, и я хочу искать только определенное ключевое слово из определенного файла напрямую, ха-ха.
@VictorVic - вы можете указать путь как часть поискового запроса. См. Результаты фильтрации в документации.
Какова цель использования библиотеки whoosh?