¿sería posible comparar dos cadenas para encontrar Alliteration y Assonance?RegEx: Comparar dos cadenas para encontrar Alliteration y Assonance
uso principalmente javascript o php
¿sería posible comparar dos cadenas para encontrar Alliteration y Assonance?RegEx: Comparar dos cadenas para encontrar Alliteration y Assonance
uso principalmente javascript o php
No estoy seguro de que una expresión regular sería la mejor manera de construir una herramienta de comparación robusta. Una expresión regular simple puede ser parte de una solución más grande que utiliza algoritmos más sofisticados para la coincidencia no exacta.
Hay una variedad de opciones disponibles para el inglés, algunas de las cuales podrían extenderse de manera bastante simple a los idiomas que usan el Latin alphabet. La mayoría de estos algoritmos han existido durante años o incluso décadas y están bien documentados, aunque todos tienen límites.
Imagino que hay algoritmos similares para los alfabetos no latinos, pero no puedo comentar sobre su disponibilidad de primera mano.
fonéticos Algoritmos
Soundex El algoritmo es casi 100 años de edad y ha sido implementado en varios lenguajes de programación. Se usa para determinar un valor numérico basado en la pronunciación de una cadena. No es preciso, pero puede ser útil para identificar palabras/sílabas que suenan similares. Lo experimenté en MS SQL Server y está disponible en PHP.
http://php.net/manual/en/function.soundex.php
consenso general (incluyendo la documentación de PHP) es que Metaphone es mucho más preciso que Soundex cuando se trata con el idioma Inglés. Hay numerosas implementaciones disponibles (Wikipedia tiene una larga lista al final del artículo) y está incluida en PHP.
http://www.php.net/manual/en/function.metaphone.php
Doble Metahpone soporta una segunda codificación de una palabra que corresponde a una pronunciación alternativa de la palabra.
Al igual que con Metaphone, Double Metaphone se ha implementado en muchos lenguajes de programación (example).
Palabra deconstrucción
Levenshtein se puede utilizar para sugerir ortográficas (por ejemplo, para normalizar la entrada del usuario) y podría ser útil como parte de un algoritmo más granular para aliteración y asonancia.
http://www.php.net/manual/en/function.levenshtein.php
Lógicamente, ayudaría a entender la división en sílabas de las palabras en la cadena de manera que cada palabra puede ser deconstruido. El salto de sílaba podría resolver la ambigüedad en cuanto a cómo deberían pronunciarse dos letras adyacentes. Esta discusión tiene algunos enlaces:
Para encontrar aliteraciones en un texto que simplemente iterar sobre todas las palabras, omitiendo palabras demasiado corto y demasiado comunes, y recoger ellos, siempre y cuando su partido de letras iniciales.
text = ''
+'\nAs I looked to the east right into the sun,'
+'\nI saw a tower on a toft worthily built;'
+'\nA deep dale beneath a dungeon therein,'
+'\nWith deep ditches and dark and dreadful of sight'
+'\nA fair field full of folk found I in between,'
+'\nOf all manner of men the rich and the poor,'
+'\nWorking and wandering as the world asketh.'
skipWords = ['the', 'and']
curr = []
text.toLowerCase().replace(/\b\w{3,}\b/g, function(word) {
if (skipWords.indexOf(word) >= 0)
return;
var len = curr.length
if (!len || curr[len - 1].charAt(0) == word.charAt(0))
curr.push(word)
else {
if (len > 2)
console.log(curr)
curr = [word]
}
})
Resultados:
["deep", "ditches", "dark", "dreadful"]
["fair", "field", "full", "folk", "found"]
["working", "wandering", "world"]
Para más análisis avanzado y también para encontrar asonancias y rimas primero tiene que traducir un texto en escritura fonética. No indicó el idioma al que se dirige, en inglés hay algunos diccionarios fonéticos disponibles en línea, por ejemplo, de Carnegie Mellon: ftp://ftp.cs.cmu.edu/project/fgdata/dict
wow, ¡gracias por la completa descripción de este tema! – Francesco
+1 ¡Buena respuesta! ¡Como programador con un título de inglés estoy súper optimizado para profundizar en tus enlaces! – rdlowrey