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