У меня есть файл, который содержит "прямые" (обычные, ASCII) кавычки, и я пытаюсь преобразовать их в реальный глифы цитат ( "кудрявые" котировки, U + 2018 до U + 201D). Так как преобразование из двух разных символов кавычек в один из них было потеряно в первую очередь, очевидно, что нет никакого способа автоматически выполнить это преобразование; тем не менее, я подозреваю, что несколько эвристик будут охватывать большинство случаев. Таким образом, план - это script (в Emacs), который выполняет примерно следующее: для каждого символа прямой кавычки
- Угадайте, какой фигурный символ цитаты использовать, если возможно
- попросите пользователя (меня) подтвердить или сделать выбор
Этот вопрос касается первого шага: какой будет хороший алгоритм (набор эвристик, более похожий) для обычного текста на английском языке (например, роман)? Вот некоторые предварительные идеи, которые, я считаю, работают для двойных кавычек (встречные примеры приветствуются!):
- Если двойная кавычка находится в начале строки, предположите, что она является открывающей цитатой.
- Если двойная кавычка находится в конце строки, угадайте заключительную цитату.
- Если двойной кавычке предшествует пробел, угадайте начальную цитату.
- Если за двойной кавычкой следует пробел, угадайте заключительную цитату.
- Если двойная кавычка не вписывается в одну из вышеуказанных категорий, предположите, что она является "противоположной" из недавно использованной формы двойной кавычки.
Одиночные кавычки сложнее, потому что '
может быть либо вводной цитатой, закрывающей цитатой, либо апострофом, и мы хотим оставить только апострофы (не должны писать "mustnt" ). Некоторые из тех же правил, что и выше, применяются, но "возможные апострофы находятся в начале слов (или линий)", хотя они менее распространены, чем "два в прошлом". Я не могу охарактеризовать правила, которые должным образом обрабатывали бы такие фрагменты, как [ "Мне нравится", что шоу 70-х годов ", - сказала она]. Это может потребовать просмотра не только соседних символов, но и вычисления расстояний между кавычками, например...
Больше идей? Это нормально, если не все возможные случаи охвачены; цель должна быть настолько умной, насколько это возможно, но не дальше.: -)
Изменить. Еще несколько вещей, о которых стоит подумать (или может быть неактуальным, не уверены):
- цитаты могут не всегда совпадать с парами. Для одинарных кавычек это очевидно, как описано выше. Но даже для двойных кавычек, когда есть цитата, которая распространяется более чем на один абзац, обычная типографская конвенция (не спрашивайте меня почему) заключается в том, чтобы начинать каждый абзац с кавычки, даже если она не была закрыта в предыдущем один. Таким образом, просто сохранение машины состояний, которая чередуется между двумя состояниями, не будет работать!
- Вложенная цитата (упоминается в примере "Мне нравится", который показан выше "): это может привести к тому, что любая из цитат не будет предшествовать пробелу или следовать пробелу.
- Британский/американский стиль пунктуации: запятые внутри кавычек или снаружи?
- Многие текстовые процессоры (например, Microsoft Word) уже выполняют какое-то преобразование, подобное этому. Хотя они не идеальны и часто могут быть раздражающими, может быть поучительно узнать, как они работают...