建议使用什么文本处理工具来解析屏幕播放



我有一些纯文本的结构化屏幕播放,格式类似于本文末尾的示例。我想把每个解析成一些格式,其中:

  • 只列出与特定地点有关的舞台指示将很容易
  • 只调出一个特定角色的对话是很容易的

我能想到的最明显的方法是使用sedperlphp在每个块周围放置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作为例子,但再次强调,这只是因为我理解它。如果像我所怀疑的那样,推出您自己的regexp,而jQuery不是最佳实践,那么我愿意接受任何被认为是此类文本处理任务的最佳实践。谢谢

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

像特雷比这样的其他剧本编辑可能也会提供这个功能。


还有Fountain,一种用于编剧的纯文本标记语言。他们提供了你可能(我没有检查他们是否提供了导入和转换的东西)为你的事业使用的库:

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


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

如果你的输入不太嘈杂,也就是说,如果你可以相信一些规律,比如缩进,它对对话框比注释更大,我会使用一个简单的上下文无关语法。你在所有语言中都有很好的实现,你会发现很多关于SO.的信息

如果你的输入变化很大,那么就采用机器学习的方法,但你需要有大量的输入和经过人工验证的输出来进行训练,这可能会很麻烦。

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

最新更新