2013-07-03 1 views
5

У меня есть простые текстовые структурированные сценарии, форматированные как пример в конце этого сообщения. Я хотел бы разобрать каждый в каком-либо формате, где:Какой инструмент обработки текста рекомендуется для синтаксического анализа сценариев?

  • Будет легко подтянуться только к тем направлениям, которые касаются определенного места.
  • Будет легко подтянуть только диалог, принадлежащий определенному персонажу.

Наиболее очевидный подход, который я могу вспомнить, используя sed или perl или php поставить Div теги вокруг каждого блока, с классами, представляющими характер, место, и является ли это ремарки или диалог. Затем откройте его как веб-страницу и используйте jQuery, чтобы вытащить все, что мне интересно. Но это звучит как круговой способ сделать это, и, может быть, это только кажется хорошей идеей, потому что это инструменты, которые я привык к. Но я уверен, что это повторяющаяся проблема, которая была решена раньше, так что может кто-нибудь рекомендовать более эффективный рабочий процесс, который можно использовать в ящике Linux? Благодарю.

Ниже приведен пример ввода:

 SOMEWHERE CORPORATION - OPTIONAL COMMENT 
     A guy named BOB is sitting at his computer. 

          BOB 
       Mmmm. Stackoverflow. I like. 

     Footsteps are heard approaching. 

          ALICE 
       Where's that report you said you'd have for me? 

     Closeup of clock ticking. 

          BOB (looking up) 
       Huh? What? 

          ALICE 
       Some more dialogue. 

     Some more stage directions. 

Вот что пример вывода может выглядеть следующим образом:

 <div class='scene somewhere_corporation'> 
     <div class='comment'>OPTIONAL COMMENT</div> 
     <div class='direction'>A guy named BOB is sitting at his computer.</div> 
     <div class='dialogue bob'>Mmmm. Stackoverflow. I like.</div> 
     <div class='direction'>Footsteps are heard approaching.</div> 
     <div class='dialogue alice'>Where's that report you said you'd have for me?</div> 
     <div class='direction'>Closeup of clock ticking.</div> 
     <div class='comment bob'>looking up</div> 
     <div class='dialogue bob'>Huh? What?</div> 
     <div class='dialogue alice'>Some more dialogue.</div> 
     <div class='direction'>Some more stage directions.</div> 
     </div> 

Я использую DOM в качестве примера, но опять же, только потому, что это то, что я Понимаю. Я открыт для всех, что считается лучшей практикой для этого типа задачи обработки текста, если, как я подозреваю, ваши собственные регулярные выражения и jQuery - не лучшая практика. Благодарю.

+0

Вы пытаетесь сделать это в реальном времени на веб-сайте? Единственная причина, по которой вы будете использовать jQuery, - это то, что кто-то вводит сценарий в текстовое поле и получает мгновенный выход на сцене. –

+2

@ChristianStewart: Если я правильно понимаю ОП, то он предлагает jQuery, что это хороший инструмент для извлечения содержимого (Х) узлов HTML на основе информации о классе или идентификаторе. Если у вас есть молоток, все выглядит как гвоздь;) – dodgethesteamroller

+0

Сценарии - это текстовые файлы, которые я загружаю, это не обязательно в реальном времени или в Интернете. @dodgethesteamroller прав, это антипаттер молоткового гвоздя, и я стараюсь избегать этого, задавая здесь лучшие идеи. – f1r3br4nd

ответ

0

Если ваш ввод не слишком шумный, то есть если вы можете доверять некоторым закономерностям, например, отступы, которые больше для диалогов, а не комментарии, я бы использовал простой Context Free Grammar. У вас хорошие реализации на всех языках, и вы найдете много информации о SO.

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

В любом случае, я бы никогда не использовал регулярные выражения для подобных проблем.

2

Вы можете использовать Celtx для import plain text scripts и экспортировать их в HTML (и RDF/XML для метаданных) (см это related thread и это blog post, which describes the file structure).

Другие редакторы сценариев, такие как Trelby, могут также предлагать эту функцию.


Существует также Fountain, простой язык разметки текста для сценаристов. Они предлагают libraries, которые вы мощь (я не проверял, если они предлагают что-то для импорта и преобразования) использовать для вашего дела:

Фонтан является свободным и открытым исходным кодом, с библиотеками, которые позволяют легко добавлять поддержку в ваших приложениях.


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