#swift #algorithm #search #text
#swift #алгоритм #Поиск #текст
Вопрос:
У меня многостраничный документ, и я хочу найти номер страницы для конкретного предложения.
Я пытался найти с помощью метода contains, но если последнее предложение разбивается на две страницы, оно не находит номер страницы.
Мой код:
func getPageNumber(sentence: Sentence) -> Int {
let pages = document.pages
for (index, page) in pages.enumerated() {
guard let sentenceText = sentence.all else { return 0 }
if page.text.contains(sentenceText) {
return index
}
}
return 0
}
Пример использования
Страница 1
Ullamcorper a lacus vestibulum sed arcu non. Nec ullamcorper sit amet risus. Donec ac odio tempor orci dapibus ultrices. Non consectetur a erat nam at lectus urna. Cursus vitae congue mauris rhoncus aenean vel elit scelerisque. Maecenas accumsan lacus vel facilisis volutpat est velit egestas dui. Justo donec enim
Страница 2
diam vulputate ut. Sed augue lacus viverra vitae. Eget duis at tellus at urna condimentum mattis. Convallis posuere morbi leo urna molestie at elementum eu. Sed tempus urna et pharetra pharetra massa massa.
Если я хочу найти «Nec ullamcorper sit amet risus». он возвращает страницу 1. Но если я хочу найти Justo donec enim diam vulputate ut. он не возвращает страницу 1 и страницу 2.
Как я могу добиться этого эффективно?
Спасибо.
Ответ №1:
Если бы это была не многостраничная страница, вы могли бы легко выполнить поиск по всем вхождениям и получить обратно массив совпадающих диапазонов. Чтобы сделать его многостраничным, вы можете просто добавить индексы разрыва страницы (которые образуют диапазоны 0 ..p1 ..p2 ..end). Теперь, учитывая диапазон совпадений, вы можете видеть, какие пересекают какие страницы, а какие содержатся на одной странице.