lingdata

Сайт курса «Лингвистические данные», бакалавры 1 курс НИУ ВШЭ

View the Project on GitHub olesar/lingdata

Кодировки. Формат конца строки. Поиск и замена. Регулярные выражения.

Практикум в продвинутом текстовом редакторе

Что понадобится: NotePad++. Владельцы Mac-ов используют аналоги: редакторы Atom, TextWrangler, Fraise и т.д.

1. Кодировки

Типы кодировок текста для русского языка:

DOS, KOI8-R, Cyrillic Windows cp1251, Unicode (UTF-8 с/без BOM, цифровой подписи)

В меню “Кодировки” замените текущую на Windows-1251 (оцените эффект:), затем обратно на UTF-8 без BOM.

Если вы открываете файл и видите “кракозябры”, то с помощью меню “Кодировки” можно подобрать правильную.

“Преобразовать в…”: переводит файл в другую кодировку (затем файл нужно сохранить). Windows-1251 называется ANSI.

2. Вид → Отображение символов

Отметьте чекбоксы: Отображать пробелы и табуляции, отображать символы конца строки (отображать все символы).

3. Формат конца строки

Непечатаемые символы, обозначающие конец строки:

Win-формат: CR+LF \r\n

old-Mac-формат: CR \r

UNIX-формат: LF \n

В режиме отображения символов конца строки вы увидите “СR”, “LF”, которые при поиске и замене в расширенном режиме и в режиме регулярных выражений задаются как эскейп-символы \r, \n, соответственно.

4. Вид → Перенос строк

автоматически переносит текст на новую строку, как в Word. Видимые концы строк при этом не сохраняются (являются “мягкими”).

5. Поиск и замена

Для работы вы можете скопировать любой текст в редактор.
Меню для поиска и замены доступно по горячей клавише Ctrl+F (см также меню Поиск и замена или Правка, в зависимости от редактора)
Отмена операции: Ctrl+Z
По умолчанию, в NotePad++ поиск происводится начиная с текущей позиции курсора до конца файла, поставьте чек на “Зациклить поиск”, чтобы замена проводилась по всему файлу.

6. Режим поиска “Регулярные выражения”

Замените все пробелы на табуляцию и затем наоборот.

Замените концы строк на пробел.

Узнайте, есть ли в тексте латинские буквы?

Этот поиск “жадный” - он будет искать строку максимальной длины, соответствующую условию в “Искать”.

Запрос <.*> в строке <p>что-то здесь</p> найдет всю строку целиком: <p>что-то здесь</p>

Нежадный (“ленивый”) поиск:

– ищет до первого вхождения символа, указанного после ?

Найдите с помощью “ленивого поиска” последовательность букв от пробела до пробела (слово).

7. Регулярные выражения: эскейп-символы

Найдите все концы абзацев, заканчивающиеся на точку.

8. Использование условий поиска (backreference)

Заключите все условие или его части в скобки.

В поле “Заменить”

Задание: Задайте маску поиска конца прямой речи.

Подсказка: используйте [ ] со списком знаков препинания

9. Предупреждение: язык регулярных выражений может немного различаться в разных редакторах и в разных языках программирования (нотацией), но в целом набор приемов и принципы поиска одинаковы.

Для знатоков:

Еще один краткий курс по регулярным выражениям в NotePad++

Практикум

А. Файл для работы - dovlatov2.txt
Что нужно сделать:
убрать ударения
заменить прописные буквы строчными в заголовке
заменить пробелы в начале абзацев на табуляцию
убрать "жесткие" концы строк, оставив деление на абзацы
при этом аккуратно обработать слова с переносами
убрать "лишние" пробелы (два и больше)
Уберите все знаки ударения

Выделите символ ударения, меню Поиск → Замена,

Найти: ˊ Заменить: (оставьте пустым) Режим поиска: обычный Заменить всё

Преобразуйте заголовок, заменив прописные буквы строчными

Правка → Преобразовать выделение → строчные

Замените 5 пробелов в начале строки на знак табуляции.

Найти: ˽˽˽˽˽ (5 пробелов)

Заменить: \t Режим поиска: расширенный

Замените концы строк на пробел

Найти: \r\n Заменить: ˽ (1 пробел). Режим поиска: расширенный

Верните концы строк в конце абзацев. (Догадайтесь, как). Подсказка: абзацы начинаются с табуляции. \t нужно заменить на нее же, но перед ней вставить……)

Cоздайте список слов по вашему файлу.

0) сохраните содержимое файла в новый файл dovlatov_wordlist.txt
1) переведите все слова в нижний регистр (Правка -> Конвертировать Регистр / Edit -> Convert case to…)
2) сделайте так, чтобы каждое слово шло с новой строки, вставив концы строк
3) сделайте так, чтобы каждый знак препинания также шел с новой строки
4) отсортируйте строки по алфавиту (Правка -> Операции со строками -> Сортировать по возрастанию / Edit -> Line operations -> Sort lines lexicographically ascending).
5) удалите повторяющиеся строки с помощью регулярных выражений
^(.*\r\n)\1+ -> \1

Дополнительное задание 2:

В файле с текстом разметьте начало и конец прямой речи с помощью тега , например, вот так:

   -- <speech>Не думаю</speech>, -- сказал редактор, потом вдруг
рассердился, -- <speech>хватит!  Вечные отговорки!  Всё не как
у людей!  Извольте одеваться так, как подобает
работнику солидной газеты!</speech>

Все ли реплики прямой речи вам удастся так разметить?