videos romantico rap para musica hop hip español dedicar caracteristicas canciones amor ruby-on-rails activerecord model

ruby on rails - romantico - Cómo modelar las interpretaciones de la música rap



rap romantico para dedicar (5)

Empecé a trabajar en un sitio web que ayudará a las personas a entender de qué hablan los raperos. Los usuarios verán la letra de una canción de rap y podrán hacer clic en ciertas letras para ver una explicación. Aquí hay una captura de pantalla (también puedes consultar el sitio here ):

texto alternativo http://img146.imageshack.us/img146/6882/clocal.png

(Letras originales censuradas, haga clic aquí para verlas)

De todos modos, mi pregunta es cómo modelar estas anotaciones en mi aplicación. En este momento, estoy almacenando las letras y anotaciones como una gran cantidad de HTML en este formato:

<div class="lyrics"> With the goons I spy <a href="#note1">Stay in tune with ma</a> <a href="#note2">She like damn This the realest since ''Kumbaya''</a> Kumbayay Killa Cam my lord </div> <div class="annotations"> <div id="note1"> "Ma" refers to ladies, generally, and specifically also the woman singing the hook; "Stay in tune" is a musical metaphor: he literally stays in tune with the singer and also in the sense that he has game. </div> <div id="note2"> Kumbaya is a campfire singalong. </div> </div>

y luego procesarlo con este método para la salida:

class Song < ActiveRecord::Base include ActionView::Helpers def annotated_lyrics lyrics = read_attribute(''annotated_lyrics'') return if lyrics.blank? require ''hpricot'' doc = Hpricot lyrics doc.at(''.lyrics'').inner_html = doc.at(''.lyrics'').inner_html.strip doc.search("a[@href^=''#note'']").set(''class'', ''tooltip'').each do |t| t.inner_html = t.inner_html.strip end doc.search("div[@id^=''note'']").set(''class'', ''annotation'').each do |a| a.inner_html = auto_link(a.inner_html.strip, :all, :target => ''_blank'') end simple_format doc.html.strip end end

y el resto lo hago con jQuery y el fantástico plugin qTip .

Esto funciona bien para mostrar, pero dado que mi aplicación no sabe acerca de la relación entre las anotaciones y las letras, será difícil, por ejemplo, agregar una interfaz para actualizar una anotación individual en línea (o en absoluto, realmente).

Por otro lado, realmente no sé cuál es la mejor manera de representar esto en ActiveRecord. Supongo que una canción podría tener "muchas-muchas" anotaciones, pero ¿cómo representaría qué letras fueron anotadas? Podría almacenar el índice de palabras de inicio y finalización, pero esto parece doloroso y sensible a cambios menores en las letras.


  1. Tokenize sus letras, para que pueda identificar una palabra en la letra utilizando, por ejemplo, una línea y un número de palabra. Otra opción es usar posiciones de personaje para sus anotaciones. En cualquier caso, como siempre, ocúpese de la codificación de caracteres de las letras.
  2. Además, nunca más toques las letras. Mejor no almacenarlos como html, sino como xml o como texto sin formato.
  3. No anotes dentro de la letra. Use un modelo en el que pueda adjuntar una posición en la letra a una anotación. Use la anotación de stand-off.

La anotación stand-off le permitirá agregar más funciones a lo largo del tiempo, como permitir que muchos usuarios anoten la misma letra. Generar el HTML que almacena como blob es fácil de hacer a partir de anotaciones de stand-off.

Es posible que le interesen los modelos de datos (xml) de las herramientas de anotación que son bastante conocidos entre los lingüistas: por ejemplo, MMAX2 y Callisto. Estos son fácilmente convertibles en modelos de bases de datos.


¿Qué tal presentar las letras de esta manera (con agradecimiento al People''s Champ)?

Well it''s that [grain grippa][1] from Houston, Tex That bar sippa, that bar no plex I''m straight up outta that [Swishahouse][2] Where G. Dash write all the checks So [check the neck, check the wrist][3] I''m balla status from head to toe [1]Referring to the wood grain steering wheel common to luxury cars [2]Swisha House is the record label Paul Wall records for [3]"Look at my watch and necklace because they are expensive"

Solo una idea, me inspiré en el marcado usado para agregar comentarios en este sitio.

Por lo tanto, para la base de datos, cree Lyric, LyricLine y tablas de anotación. Las anotaciones tienen valores LyricLineIds, StartChar y EndChar y un campo Significado o Descripción. LyricLines es el texto de cada línea, relacionado con la entidad Lyric por LyricIds. Las letras almacenan información de canciones, información de idiomas, lo que sea.

Este formato debe ser bastante fácil de generar fuera de la base de datos y tiene el beneficio de ser más "legible para humanos" que XML y editable en el lugar, por lo que puede probarlo mucho más fácilmente antes de tener que desarrollar una interfaz de usuario completa.

Tengo esta pregunta favorita, y espero ver el progreso del sitio. ¡Trabajo interesante!


En cuanto a enlazar anotaciones y letras, puedes tener varios enfoques:

  1. Enlaza las anotaciones propuestas arriba a los lugares exactos en las letras (por ejemplo, números de línea, palabras, caracteres).

  2. Hacer anotaciones de diccionario / palabras <->. Justo antes de mostrar tu diccionario de búsqueda e insertar anotaciones en la página. Si se trata de velocidad o especificidad, cada entrada en el diccionario puede etiquetarse con canciones relevantes. Si desea que sus anotaciones sean robustas a pequeños cambios en las letras, al mismo tiempo que encuentra coincidencias en las letras de la frase anotada, use la métrica de subsecuencia más larga .

  3. Combine # 1 y # 2


Tu primer instinto para establecer asociaciones con una canción que tenga muchas anotaciones definitivamente funcionaría. Dos posibles enfoques para almacenar los índices de inicio y finalización de la anotación:

  1. Almacene la línea de inicio y final en la que ocurrió la letra (cuente los saltos de línea en su archivo de letras)

o

  1. Almacene el límite de palabra de inicio y final (o solo espacio) que denota la anotación. Esto al menos te permitiría corregir la mayoría de los errores tipográficos sin romper el índice de anotación.

XML sería un gran modelo también.

<song> <title>...</title> <lyrics> <verse> <line>Well it''s that <dd>grain grippa</dd><dt>Referring to the wood grain steering wheel common to luxury cars</dt> from Houston, Tex</line> <line>That bar sippa, that bar no plex</line> <line>I''m straight up outta that <dd>Swishahouse</dd><dt>Swisha House is the record label Paul Wall records for</dt></line> <line>Where G. Dash write all the checks</line> <line>So <dd>check the neck, check the wrist</dd><dt>"Look at my watch and necklace because they are expensive"</dt></line> <line>I''m balla status from head to toe</line> </verse> <chorus> <line>...</line> </chorus> <verse>...</verse> <repeat-chorus/> </lyrics> </song>

Bastante fácil de editar y actualizar. Crear una IU probablemente no sería difícil. Si abriera la creación de registros al público, podría cambiar <dd> y <dt> por <phrase> y <definition> . Pero dd y dt son el estándar HTML y por eso los utilicé en primer lugar. Esto le permitiría usar CSS directo para darle un estilo con un poco de amor de JavaScript para que se vea increíble. (Por cierto, el sitio es increíble)