2012-12-19 8 views
9

Mi chiedevo se qualcuno avesse qualche consiglio o potesse indicarmi la giusta direzione per trovare/creare una sorta di algoritmo per trovare le parole in rima.Implementazione di un cercatore di rima

In particolare, non voglio utilizzare un'API, poiché creare l'algoritmo solo per crearlo è il mio obiettivo finale.

Non che dovrebbe essere importante ma sto codificando in java.

Grazie

+0

Buona fortuna, infinitamente dura? – EricG

+0

qual è la definizione di una rima? –

+0

@AlexLynch http://en.wikipedia.org/wiki/Rhyme, non so se il tuo linguaggio li abbia definiti, ma nel mio nativo (polacco) classifichiamo anche le rime. ;-) –

risposta

7

Questo sembra che potrebbe essere un progetto enorme se non si desidera utilizzare un'API. Il passo impegnativo sarebbe quello di determinare la fonetica di una parola (due parole rima se le loro terminazioni sono foneticamente simili). Se puoi farlo, puoi confrontare i termini della loro pronuncia. Potresti trovare un'API che converta le parole conosciute nelle loro grafie fonetiche, ma se non vuoi usare le API devi farlo tu stesso e non è un compito da poco ... per non parlare, non è stato perfetto da nessuno .

L'altro metodo sarebbe quello di ricerca l'algoritmo Metaphone, ha spiegato qui: http://www.blackbeltcoder.com/Articles/algorithms/phonetic-string-comparison-with-soundex

+0

Soundex è stato sviluppato specificamente per i nomi di famiglie nordamericane durante l'elaborazione del loro censimento. Non è una biblioteca per scopi generali per l'analisi fonetica delle parole, anche se è ancora probabilmente di interesse per il richiedente. Si focalizza anche sull'inizio delle parole, mentre le rime si riferiscono ai loro finali. La tecnica può essere malleabile. –

+0

Ho fornito quel collegamento a causa dell'algoritmo del Metaphone, non di Soundex. – Foggzie

6

miglior algoritmo userà un dizionario di parole classificate in gruppi con rime. È un problema molto difficile e richiede un background linguistico. Suppongo che tu voglia un algoritmo, probabilmente non il migliore, per trovare automaticamente le rime.

Idea di base per codificare la pronuncia della parola (non la parola stessa) con un certo valore. E i valori che terminano con codici uguali identificano le parole in rima.

Dal mio punto di vista è più la ricerca che trovare l'algoritmo corretto.

Date un'occhiata a che la carta: A System for the Automatic Identification of Rhymes

4

Penso che sfruttando un algoritmo standard di fonetica sarebbe una buona idea. Penso che Soundex potrebbe essere un po 'limitato, ma uno double metaphone sarebbe probabilmente una buona scelta.

Ottenere le rappresentazioni del metaphone delle parole in questione, rimuovere i primi caratteri e verificare se la parte restante della più breve delle due parole corrisponde alla fine del più lungo. Con il doppio metaphone, è molto simile, ma effettua quattro confronti, da primario a primario, da secondario a primario, da primario a secondario e da secondario a secondario.

Penso che sarebbe un buon punto di partenza.

Una nota su questo e molti altri algoritmi fonetici: non è progettato per fornire una definizione fonetica precisa. La pronuncia geografica varia, le errate pronunce comuni e le pronunce alternative rendono impossibile pronunciare una pronuncia corretta e veloce basata unicamente sulla parola. Il romanzo ortografico e l'utilizzo di lettere rendono difficile ottenere algoritmicamente una pronuncia stretta (prendersi cura di alcuni antipasti?). Inoltre, uno degli obiettivi principali di molti di questi algoritmi è quello di associare tra loro suoni o parole o nomi simili, quindi i risultati sono solitamente intesi come un po 'imprecisi (probabilmente è una buona cosa, anche per questo scopo).

+1

Il doppio metaphone elimina tutte le vocali non iniziali dalla parola, quindi non ti riporta fino in fondo alla rima. – charleyc

+0

Assolutamente vero. Tuttavia, ritengo che sia un buon punto di partenza. – femtoRgon

3

Ho scritto un programma di dizionario in rima allo my blog. L'idea è di usare un dizionario con pronunce e confrontare i fonemi a partire dalla fine; due parole con gli stessi fonemi finali sono rime l'una per l'altra.