RegEx: Compare duas strings para encontrar Alliteration and Assonance

seria possível comparar duas strings para encontrar Alliteration and Assonance?

eu uso principalmente javascript ou php

Não tenho a certeza de que uma regex seja a melhor maneira de construir uma ferramenta de comparação robusta. Uma regex simples pode ser parte de uma solução maior que usou algoritmos mais sofisticados para uma correspondência não exata.

Há uma variedade de opções prontamente disponíveis para o inglês, algumas das quais podem ser amplamente extensas a linguagens que usam o alfabeto latino . A maioria destes algoritmos tem sido em torno de anos ou mesmo décadas e estão bem documentados, embora todos tenham limites.

Imagino que existem algoritmos semelhantes para alfabetos não latinos, mas não consigo comentar sobre sua disponibilidade em primeira mão.

Algoritmos fonéticos

O algoritmo Soundex tem quase 100 anos e foi implementado em várias linguagens de programação. Ele é usado para determinar um valor numérico com base na pronúncia de uma string. Não é preciso, mas pode ser útil para identificar palavras / sílabas de som semelhantes. Experimentei com isso no MS SQL Server e está disponível no PHP.

http://php.net/manual/en/function.soundex.php

O consenso geral (incluindo os documentos do PHP) é que o Metaphone é muito mais preciso do que o Soundex quando se lida com a língua inglesa. Existem inúmeras implementações disponíveis (a Wikipédia possui uma lista longa no final do artigo) e está incluída no PHP.

http://www.php.net/manual/en/function.metaphone.php

Double Metahpone suporta uma segunda codificação de uma palavra correspondente a uma pronúncia alternativa da palavra.

Tal como acontece com o Metaphone, o Double Metaphone foi implementado em muitas linguagens de programação ( exemplo ).

Deconstruction de palavras

Levenshtein pode ser usado para sugerir soletrações alternativas (por exemplo, para normalizar a input do usuário) e pode ser útil como parte de um algoritmo mais granular para aliteração e assonância.

http://www.php.net/manual/en/function.levenshtein.php

Logicamente, ajudaria a entender a silabicação das palavras na corda para que cada palavra pudesse ser desconstruída. A ruptura da sílaba poderia resolver a ambigüidade quanto à forma como duas letras adjacentes deveriam ser pronunciadas. Este tópico tem alguns links:

Detecção de sílaba PHP

Para encontrar aliterações em um texto, você simplesmente itera sobre todas as palavras, omitido palavras muito curtas e muito comuns, e colecione-as enquanto as letras iniciais correspondem.

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 análises mais avançadas e também para encontrar assonâncias e rimas, primeiro você deve traduzir um texto para a ortografia fonética. Você não disse em que idioma você segmenta, pois em inglês existem alguns dictionarys fonéticos disponíveis on-line, por exemplo, da Carnegie Mellon: ftp://ftp.cs.cmu.edu/project/fgdata/dict