С++ для начинающих



         

Система текстового поиска


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

Если одно или несколько слов запроса найдены, печатается количество их вхождений. По желанию пользователя печатаются предложения, содержащие найденные слова. Например, если нужно найти все вхождения словосочетаний Civil War и Civil Rights, запрос может выглядеть таким образом[9]:

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.) .




    Содержание  Назад  Вперед