5

我有一些纯文本有点结构化的剧本,格式类似于本文末尾的示例。我想将每个解析为某种格式,其中:

  • 很容易拉出处理特定地点的舞台方向。
  • 很容易调出属于特定角色的对话。

我能想到的最明显的方法是使用sedorperlphp在每个块周围放置 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 不是最佳实践,我愿意接受这种类型的文本处理任务的最佳实践。谢谢。

4

2 回答 2

2

您可以使用Celtx导入纯文本脚本并将它们导出为 HTML(以及用于元数据的 RDF/XML)(请参阅此相关线程和此博客文章,其中描述了文件结构)。

像Trelby这样的其他剧本编辑器也可能提供此功能。


还有Fountain,一种用于剧本创作的纯文本标记语言。他们提供了您可能会(我没有检查他们是否提供用于导入和转换的东西)用于您的原因的库:

Fountain 是免费和开源的,其库可以轻松地在您的应用程序中添加支持。


即使这些项目不能用于您的事业,您至少可以将它们的格式重新用于您的输出。

于 2013-07-06T20:45:11.047 回答
0

如果您的输入不是太嘈杂,即如果您可以相信一些规律性,例如对话比评论更大的缩进,我会使用简单的Context Free Grammar。你在所有语言中都有很好的实现,你会发现很多关于 SO 的信息。

如果您的输入变化很大,则采用机器学习路线,但您需要大量输入和经过人工验证的输出进行训练,这可能很麻烦。

无论如何,我永远不会使用正则表达式来解决这样的问题。

于 2013-07-04T17:04:16.893 回答