algorithm - usar - Ideas para convertir citas rectas a citas rizadas
mendeley (9)
adivina qué personaje de cita rizado usar, si es posible
No es, en el caso general.
El algoritmo simple que usan la mayoría de los convertidores automáticos es solo mirar la letra anterior que escribiste antes del ''o''. Si es un espacio, inicio de línea, corchete de apertura u otra cita de apertura, elige abrir cotización, más cierre. este método es que puede ejecutarse tal cual, así que cuando elige el incorrecto, generalmente puede corregirlo.
queremos dejar apóstrofes solos
¡Estoy de acuerdo! Pero no muchas personas lo hacen. Es una práctica normal de composición tipográfica convertir un apóstrofo en una comilla simple que mira hacia la izquierda. Personalmente prefiero dejarlos tal como están, para distinguirlos de las citas adjuntas, hacer que el texto sea más fácil (me parece) leer, y posible procesarlo automáticamente.
Sin embargo, esto realmente es solo mi gusto y generalmente no se considera justificado simplemente porque el personaje está definido por el estándar Unicode como APOSTROPHE.
Es posible que los apóstrofes estén al comienzo de las palabras
En efecto. No hay forma de distinguir un apóstrofo de una potencial cita abierta en casos como el clásico Fish ''n'' Chips, a falta de enormes cantidades de contexto cultural.
(Sin mencionar primos, okinas, paradas glóticas y varios otros usos del apóstrofo ...)
Lo mejor que puedes hacer, por supuesto, es instalar un diseño de teclado que pueda escribir presupuestos inteligentes directamente. Tengo '''' en AltGr + [], "" en AltGr + Mayús + [], - en AltGr + [Mayús] + guión, y así sucesivamente.
Tengo un archivo que contiene citas "rectas" (normales, ASCII), y estoy tratando de convertirlas en glifos de comillas reales ( comillas "rizadas", U + 2018 a U + 201D). Dado que la transformación de dos caracteres de comillas diferentes en uno solo ha sido con pérdidas en primer lugar, obviamente no hay forma de realizar esta conversión automáticamente; sin embargo, sospecho que algunas heurísticas cubrirán la mayoría de los casos. Entonces, el plan es una secuencia de comandos (en Emacs) que hace algo como lo siguiente: para cada carácter de comillas,
- adivina qué personaje de cita rizado usar, si es posible
- Pídale al usuario (me) que confirme, o haga una elección
Esta pregunta es sobre el primer paso: ¿cuál sería un buen algoritmo (un conjunto de heurísticas, más como) para usar, para el texto en inglés normal (una novela, por ejemplo)? Aquí hay algunas ideas preliminares, que creo que funcionan para comillas dobles (¡los contraejemplos son bienvenidos! ):
- Si una comilla doble está al principio de una línea, supongo que es una cita de apertura.
- Si una comilla doble está al final de una línea, adivine una cotización de cierre.
- Si una comilla doble está precedida por un espacio, adivine una cita de apertura.
- Si una comilla doble es seguida por un espacio, adivine una cita de cierre.
- Si una comilla doble no cabe en una de las categorías anteriores, adivine que es el "opuesto" de la clase de comillas dobles utilizada más recientemente.
Las comillas simples son más complicadas, porque una ''
puede ser una cita de apertura, una de cierre o un apóstrofo, y queremos dejar los apóstrofos solos (no debe escribir "no debe"). Se aplican algunas de las mismas reglas que las anteriores, pero es posible que los apóstrofes estén al principio de las palabras (o líneas), aunque es menos común que ''twas en el pasado. No puedo pensar en reglas que manejen adecuadamente fragmentos como ["Me gusta" Ese show de los 70 "", dijo]. Puede requerir mirar más allá de los personajes vecinos y calcular distancias entre comillas, por ejemplo ...
¿Alguna idea más? Está bien si no todos los casos posibles están cubiertos; el objetivo es ser lo más inteligente posible pero no más. :-)
Editar : algunas cosas más que valdría la pena pensar (o podrían ser irrelevantes, no estoy seguro):
- las cotizaciones pueden no estar siempre en pares coincidentes : para las comillas simples, es obvio por qué, como arriba. Pero incluso para comillas dobles, cuando hay una cita que se extiende por más de un párrafo, la convención tipográfica usual (no me pregunten por qué) es comenzar cada párrafo con una comilla, aunque no se haya cerrado en la anterior uno. ¡Así que simplemente mantener una máquina de estado que alterna entre dos estados no funcionará!
- Cita anidada (aludida en el ejemplo anterior de "Me gusta" Ese espectáculo de los años 70 "): esto podría hacer que cualquier tipo de cita no sea precedida o seguida por un espacio.
- Estilo de puntuación británico / estadounidense: ¿hay comas dentro de las comillas o fuera?
- Muchos procesadores de texto (por ejemplo, Microsoft Word) ya hacen algún tipo de conversión como esta. Aunque no son perfectos y a menudo pueden ser molestos, puede ser instructivo aprender cómo funcionan ...
Lo básico es siempre tratar de encontrar pares iguales. Dado que cada cotización tiene una cotización coincidente, puede hacer que su programa solicite su ayuda solo cuando no esté seguro de cuál es la cotización correspondiente.
Las citas de apertura están siempre en la apertura de una línea o tienen un espacio delante de ellas. Las cotizaciones de cierre siempre un espacio después de ellas. Si encuentra dos puntos con una cita siguiente, probablemente sea una cita de cierre.
Si la carta que sigue a la cita es en mayúscula, probablemente sea una cita de apertura.
Si hay un signo de puntuación delante de la cita, probablemente sea una cita de cierre.
Intenta hacerlo iterativamente. El programa debería preguntarle primero todas las citas que definitivamente puede asignar a una función. (Solo para asegurarse de que no ha cometido ningún error).
En la segunda ronda, algo así como todas las citas que no está seguro de si están abriendo citas o apóstrofes. Para todas las citas de apertura tiene que encontrar automáticamente la cotización de cierre.
Otra idea, quizás menos compleja, podría ser:
Encuentre todas las citas que no sean citas preguntándole al usuario acerca de cada una que podría ser una cita o no.
Todas las citas restantes deben ser bastante fáciles de convertir. Las comillas de apertura tienen un espacio o línea nueva delante de ellos y cierran después de ellos.
Una última reflexión:
Debe separar el proceso, como procesar solo por párrafos. Si su programa comete un error, que probablemente se deba a la complejidad del lenguaje, es más fácil corregirlo y el programa puede comenzar de nuevo con el nuevo párrafo.
Aquí hay una expresión regular que podría ayudar con las comillas dobles:
/([^/s/(]?)"(/s*)([^//]*?(//.[^//]*)*)(/s*)("|/n/n)([^/s/)/./,;]?)/gms
Se reiniciará en cada párrafo e identificará pares de comillas (y también le permitirá verificar que el espaciado sea correcto antes y después de las comillas, si es útil).
Numbered element identification
1 non-white-space before quote quote
2 white-space after leading quote
5 white-space before trailing quote
6 trailing quote (or double-newline, i.e. start of a paragraph
7 character after trailing quote if not whitespace or right paren
Creo que sería razonable ampliar esto para sus otros casos (simplemente no he tenido la necesidad todavía).
Es la sintaxis de JavaScript. Es bastante rápido, pero no he hecho más optimización que mi "lo suficientemente bueno". Hará, digamos, un libro de 400 páginas en aproximadamente un segundo. Creo que sería difícil hacer coincidir su velocidad de procedimiento.
Odio decirlo, pero el mejor curso de acción podría ser estudiar qué hace Word y copiarlo. Incluso si está mal en algunos casos, representa un estándar al que muchas personas se han acostumbrado. Un comportamiento para emular es tener deshacer (Ctrl-Z) volver inmediatamente a la cita recta después de haber sustituido una curva.
Parece que tu publicación inicial cubre la mayoría de las ideas que iba a escribir aquí, esto es lo que me queda ...
Para el ejemplo de apóstrofo ("Me gusta" Ese show de los 70 "", dijo), es poco probable que las citas se aniden directamente dentro de las comillas del mismo tipo. Podrías tomar ventaja de eso.
La mejor manera de hacer esto en mi opinión es hacer que el código solo maneje casos no ambiguos (las comillas dobles son bastante simples). Para los que tienen múltiples opciones posibles, almacene su posición en una lista y examínela cuando haya terminado. Es posible que encuentre algunos casos más fácilmente codificados allí, o puede decidir arreglarlos manualmente.
Un buen lugar para comenzar sería con una máquina de estado:
- Comenzando en la posición 0, itera sobre los personajes
- Al encontrar una cotización, ingrese el estado "Cotizado" (comillas abiertas)
- Si está en estado "Cotizado" y encuentra una cotización, regrese al estado "Comenzar" (cotización de cierre)
Puede tomar decisiones adicionales en cada una de las transiciones de estado.
Podría intentar normalizar las comillas simples identificando las conjunciones conocidas, por ejemplo, y convirtiéndolas en un carácter diferente, no de texto, antes del procesamiento.
Mi $ 0.02
["Me gusta" Ese show de los 70 "", dijo]
Originalmente pensé que quizás usar múltiples pasadas sobre el texto para obtener información del contexto podría ayudar, pero eso no resolvería todas las instancias.
Lo mejor que puede hacer es crear una lista de posibles conjuntos de palabras / expresiones como ''twas,'' tis, ''70''s, etc. y colocarlas en el diccionario con autocorrección para convertir las rectas en rizos y viceversa. Los controles ortográficos se ejecutan en cada palabra de todos modos, ¿no? (lo siento, eso no ayuda a su problema de emacs)
OO ignora la comilla simple que se curva al mismo tiempo por lo que puedo decir.
Wikipedia tiene un poco de información sobre estas cosas molestas.
Lingüística computacional a nadie?
Alguien mencionó que si tuviera una gran cantidad de contexto cultural, podría ser factible. Por lo tanto, la solución automática exagerada pero más precisa para el problema es el análisis superficial . Esto requiere un corpus de cualquier lenguaje y modo con el que estés tratando (por ejemplo, el corpus de Brown para el inglés general).
Desarrolle un clasificador para citas rizadas basadas en el contexto sintáctico de las comillas que ocurren en el corpus. ¡Finalmente, da tu contexto sintáctico arbitrario con una cita directa a tu clasificador y saca el personaje de cita más probable!
Prueba Shift + Ctrl + "(tecla de comillas dobles), esto funcionó para mí en Windows 10, usando un programa llamado Kalipso.