Подтвердить что ты не робот

Как моделировать интерпретации рэп-музыки

Я только начал работать на веб-сайте, который поможет людям понять, о чем говорят рэперы. Пользователи будут видеть тексты песни рэпа, и они смогут щелкнуть некоторые тексты, чтобы увидеть объяснение. Вот скриншот (вы также можете проверить сам сайт здесь):

alt text http://img146.imageshack.us/img146/6882/clocal.png

(Оригинальная лирика censored; нажмите здесь, чтобы увидеть их)

В любом случае, мой вопрос заключается в том, как моделировать эти аннотации в моем приложении. Прямо сейчас, я сохраняю текст и аннотации как один большой кадр HTML в этом формате:

<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>

а затем обработать его с помощью этого метода для вывода:

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

а остальное - с jQuery и фантастическим плагином qTip.

Это отлично подходит для отображения, но поскольку мое приложение не знает о взаимосвязи между аннотациями и текстами, будет сложно, скажем, добавить интерфейс для обновления отдельной аннотации inline (или вообще, на самом деле).

С другой стороны, я действительно не знаю, как лучше всего представить это в ActiveRecord. Я полагаю, что песня может иметь "has_many" аннотации, но как я могу представить, какие тексты были аннотированы? Я мог бы хранить индекс начала и конца слова, но это кажется болезненным и чувствительным к незначительным изменениям в текстах.

4b9b3361

Ответ 1

Как насчет того, чтобы представить лирику, как это (с помощью People Champ)?

Well it 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"

Просто идея, я был вдохновлен разметкой, используемой для добавления комментариев на этот сайт.

Итак, для базы данных создайте таблицы Lyric, LyricLine и Annotation. Аннотации имеют значения LyricLineIds, StartChar и EndChar и поле Значение или Описание. LyricLines - это текст каждой строки, связанный с лирическим объектом LyricIds. Тексты песен хранят информацию о песнях, информацию о языках, что угодно.

Этот формат должен быть довольно легко сгенерирован из базы данных и имеет преимущество быть более "понятным для человека", чем XML и редактируемым на месте, поэтому вы можете протестировать его намного проще, прежде чем вам придется разрабатывать полный интерфейс.

У меня есть этот вопрос, и я жду просмотра сайта. Интересная работа!

Ответ 2

  • Обозначьте свою лирику, чтобы вы могли идентифицировать слово в тексте, используя, например, строка и номер слова. Другой вариант - использовать позиции символов для ваших аннотаций. В любом случае, как всегда, позаботьтесь о кодировке символов.
  • Далее, никогда не прикасайтесь к текстам. Лучше не хранить их как html, а как xml или как обычный текст.
  • Не комментируйте текст. Используйте модель, в которой вы можете прикреплять позицию в тексте к аннотации. Используйте аннотацию "stand-off".

Отметка аннотации позволит вам добавлять дополнительные функции с течением времени, например, позволяя многим пользователям аннотировать те же тексты. Создание HTML-кода, хранящегося в виде блоба, легко сделать из аннотаций в режиме ожидания.

Вам могут быть интересны (xml) модели данных инструментов аннотации, которые хорошо известны среди лингвистов: например, MMAX2 и Callisto. Они легко конвертируются в модели баз данных.

Ответ 3

XML также будет отличной моделью.

<song>
  <title>...</title>
  <lyrics>
    <verse>
      <line>Well it 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>

Довольно легко редактировать и обновлять. Создание пользовательского интерфейса для него, вероятно, не составит труда. Если вы открыли создание записей для публики, вы можете изменить <dd> и <dt> на <phrase> и <definition>. Но dd и dt - это стандарт HTML, поэтому я использовал их в первую очередь. Это позволит вам использовать прямой CSS для его стилизации с небольшой любовью к JavaScript, чтобы он выглядел потрясающе. (BTW Сайт замечательный.)

Ответ 4

Ваш первый инстинкт настройки ассоциаций с песней, содержащей много аннотаций, определенно будет работать. Два возможных подхода к сохранению индексов аннотаций начала и окончания:

  • Сохраните начальную и конечную строки, на которых была сделана лирика (подсчитайте строки в лирическом файле)

или

  1. Сохраните начальную и конечную границу слова (или просто пробел), обозначающую аннотацию. Это по крайней мере позволит вам исправить большинство опечаток, не нарушая индекс аннотации.

Ответ 5

Что касается связывания аннотаций и текстов песен, вы можете иметь несколько подходов:

  • Свяжите предложенные выше аннотации с точными местами в текстах (например, номера строк, слова, символы).

  • Сделайте словарные фразы/слова ↔ аннотацию. Перед отображением вашего поиска словарь и вставить в аннотации к странице. Если скорость или специфичность относятся к каждой записи в словарь может быть помечен соответствующими песнями. Если вы хотите, чтобы ваши аннотации были надежными небольшие изменения в текстах, чем при поиске матчей в текстах для использования аннотированной фразы Самая длинная общая метрика подпоследовательности.

  • Объединить # 1 и # 2