6.1. Система текстового поиска
6.1. Система текстового поиска
В систему текстового поиска входят текстовый файл, указанный пользователем, и средство для задания запроса, состоящего из слов и, возможно, логических операторов.
Если одно или несколько слов запроса найдены, печатается количество их вхождений. По желанию пользователя печатаются предложения, содержащие найденные слова. Например, если нужно найти все вхождения словосочетаний Civil War и Civil Rights, запрос может выглядеть таким образом :
Civil ( War || Rights )
Результат запроса:
Civil: 12 вхождений
War: 48 вхождений
Rights: 1 вхождение
Civil War: 1 вхождение
Civil Rights: 1 вхождение
(8) Civility, of course, is not to be confused with
Civil Rights, nor should it lead to Civil War
Здесь (8) представляет собой номер предложения в тексте. Наша система должна печатать фразы, содержащие найденные слова, в порядке возрастания их номеров (т.е. предложение номер 7 будет напечатано раньше предложения номер 9), не повторяя одну и ту же несколько раз.
Наша программа должна уметь:
* запросить имя текстового файла, а затем открыть и прочитать этот файл;
организовать внутреннее представление этого файла так, чтобы впоследствии соотнести
* найденное слово с предложением, в котором оно встретилось, и определить порядковый номер этого слова;
понимать определенный язык запросов. В нашем случае он включает следующие операторы:
два слова непосредственно следуют одно за другим в строке
|| одно или оба слова встречаются в строке
! слово не встречается в строке
() группировка слов в запросе
*
Используя этот язык, можно написать:
Lincoln
чтобы найти все предложения, включающие слово Lincoln, или
! Lincoln
для поиска фраз, не содержащих такого слова, или же
( Abe || Abraham ) Lincoln
для поиска тех предложений, где есть словосочетания Abe Lincoln или Abraham Lincoln.
Представим две версии нашей системы. В этой главе мы решим проблему чтения и хранения текстового файла в отображении, где ключом является слово, а значением – номер строки и позиции в строке. Мы обеспечим поиск по одному слову. (В главе 17 мы реализуем полную систему поиска, поддерживающую все указанные выше операторы языка запросов с помощью класса Query.) .
Возьмем шесть строчек из неопубликованного детского рассказа Стена Липпмана (Stan Lippman) :
Рис. 2.
Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful fiery bird, he tells her, magical but untamed. "Daddy, shush, there is no such thing," she tells him, at the same time wanting him to tell her more. Shyly, she asks, "I mean. Daddy, is there?"
После считывания текста его внутреннее представление выглядит так (процесс считывания включает ввод очередной строки, разбиение ее на слова, исключение знаков препинания, замену прописных букв строчными, минимальная поддержка работы с суффиксами и исключение таких слов, как and, a, the):
alice ((0,0))
alive ((1,10))
almost ((1,9))
ask ((5,2))
beautiful ((2,7))
bird ((2,3),(2,9))
blow ((1,3))
daddy ((0,8),(3,3),(5,5))
emma ((0,1))
fiery ((2,2),(2,8))
flight ((2,5))
flowing ((0,4))
hair ((0,6),(1,6))
has ((0,2))
like ((2,0))
long ((0,3))
look ((1,8))
magical ((3,0))
mean ((5,4))
more ((4,12))
red ((0,5))
same ((4,5))
say ((0,9))
she ((4,0),(5,1))
shush ((3,4))
shyly ((5,0))
such ((3,8))
tell ((2,11),(4,1),(4,10))
there ((3,5),(5,7))
thing ((3,9))
through ((1,4))
time ((4,6))
untamed ((3,2))
wanting ((4,7))
wind ((1,2))
Ниже приводится пример работы программы, которая будет реализована в данном разделе (то, что задает пользователь, выделено курсивом):
( line 1 ) Alice Emma has long flowing red hair. Her Daddy says
enter a word against which to search the text.
( line 1 ) Alice Emma has long flow-ing red hair. Her Daddy says
( line 4 ) magical but untamed. "Daddy, shush, there is no such thing,"
( line 6 ) Shyly, she asks, "I mean, Daddy, is there?"
enter a word against which to search the text.
enter a word against which to search the text.
to quit, enter a single character == .
Ok, bye!
Для того чтобы реализация была достаточно простой, необходимо детально рассмотреть стандартные контейнерные типы и тип string, представленный в главе 3.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Ввод и редактирование текстового контента веб-страницы
Ввод и редактирование текстового контента веб-страницы Как мы уже отмечали ранее, вся работа с контентом веб-страницы ведется в рабочей области окна программы, а с помощью расположенных вверху вкладок выбирается требуемый режим работы и, соответственно, инструменты,
Ввод и оформление текстового контента
Ввод и оформление текстового контента Как правило, после предварительной разметки веб-страницы и формирования ее структуры веб-разработчики занимаются вводом и оформлением текстового контента, а уже после этого добавляют на страницу ссылки, изображения и прочие
13.3.1. Установка текстового домена: textdomain()
13.3.1. Установка текстового домена: textdomain() Законченное приложение может содержать множество компонентов: отдельные исполняемые файлы, написанные на С или C++ или на языках сценариев, которые также могут получить доступ к возможностям gettext, таких, как gawk или оболочка Bash Все
Разработка записной книжки в формате текстового файла
Разработка записной книжки в формате текстового файла Последний пример, который мы рассмотрим в этой главе, посвящен обработке данных, хранящихся в текстовом файле с разделителями (это может быть, например, выборка из электронной таблицы, базы данных и т.п.).Предположим,
9.3.4. Изменение раскладки клавиатуры для текстового режима
9.3.4. Изменение раскладки клавиатуры для текстового режима В дистрибутиве Red Hat загрузка таблицы раскладки клавиатуры и системного фонта производится в файле /etc/rc.d/rc.sysinit. Но лезть в этот файл и корректировать его содержимое для изменения раскладки не требуется. Дело в том,
7.2.2.1. Корневая файловая система и система инициализации
7.2.2.1. Корневая файловая система и система инициализации Итак, вы выбрали загрузку Linux. Загрузчик GRUB загрузит ядро, а затем передаст ему параметры и управление. Подробновесь процесс загрузки ядра рассматриваться здесь не будет. Вам достаточно знать следующее: ядру при
Google Analytics – бесплатная система от лидера мирового поиска
Google Analytics – бесплатная система от лидера мирового поиска На наш взгляд, это самая удобная система аналитики с очень большим набором функций.Мы регулярно используем ее в своей работе для анализа следующих показателей:? информация о посетителях (браузер, страна, поведение,
Создание текстового слоя
Создание текстового слоя Как мы уже отмечали, при использовании инструментов Горизонтальный текст и Вертикальный текст новый слой создается автоматически, как только вы вводите первый символ.Чтобы добавить в изображение текст, нужно выполнить следующие действия.1.
Настройки текстового редактора
Настройки текстового редактора Как уже говорилось, в программу InDesign встроен текстовый редактор для набора, проверки и исправления текста. В разделе Story Editor Display (Отображение текстового редактора) (рис. 7.13) настраивается внешний вид текста в редакторе. Это никак не повлияет
Чтение из текстового файла
Чтение из текстового файла Теперь выясним, как программными средствами читать данные из файла, используя соответствующий тип StreamReader. Вы должны помнить, что этот класс получается из TextReader, функциональные возможности которого описаны в табл. 16.8.Таблица 16.8. Основные члены
Использование текстового редактора для подготовки программы
Использование текстового редактора для подготовки программы В отличие от языка Бейсик у Си нет собственного текстового редактора. В качестве него вы можете использовать любой из редакторов общего типа, имеющихся в вашей вычислительной системе. В операционной системе
Редактирование текстового блока
Редактирование текстового блока Текстовый блок является таким же объектом, как и любой другой объект. Однако поскольку текст имеет свою специфику, то и результаты выполняемых над блоком текста операций будут иметь определенные отличия от результатов работы тех же
5.2. Основные приемы работы, элементы текстового редактора
5.2. Основные приемы работы, элементы текстового редактора При создании документа для эффективной работы необходимо научиться нескольким основным приемам:1. Выбор команд из строки меню, контекстных меню и панели инструментов, как мышью, так и с клавиатуры.Контекстные
5.14. Дополнительные возможности текстового редактора
5.14. Дополнительные возможности текстового редактора Оформление сносокСноска – это примечание к тексту, которое располагается чаще в нижней части страницы (обычная) или в конце документа (концевая). Каждая сноска имеет либо номер, который проставляется автоматически,
Параметры текстового блока
Параметры текстового блока Задавать параметры можно не только для отдельных символов или отдельного абзаца текста, но и для всего текстового блока. Этих параметров немного, но они весьма важны.Начнем с кнопки-выключателя, расположенной в панели Properties: Если она включена,