建议使用什么文本处理工具来解析剧本?

时间:2013-07-03 17:15:11

标签: text nlp semantic-markup searchable

我有一些纯文本有点结构的剧本,格式如本文末尾的例子。我想将每个解析为以下格式:

  • 只需处理与特定地点相关的舞台指示即可。
  • 只需提取属于特定角色的对话即可。

我能想到的最明显的方法是使用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作为示例,但同样,只是因为这是我理解的东西。如果我怀疑,滚动你自己的正则表达式和jQuery不是最好的做法,那么我对这种类型的文本处理任务的最佳实践持开放态度。感谢。

2 个答案:

答案 0 :(得分:2)

您可以将Celtx用于import plain text scripts并将其导出为HTML(以及元数据的RDF / XML)(请参阅此related thread和此blog post, which describes the file structure)。

Trelby等其他剧本编辑也可能提供此功能。


还有Fountain,一种用于编剧的纯文本标记语言。他们提供libraries可能(我没有检查它们是否提供导入和转换的内容)用于您的事业:

  

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


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

答案 1 :(得分:0)

如果您的输入不太嘈杂,即如果您可以信任某些规则,例如对于对话而不是注释的缩进,我会使用简单的Context Free Grammar。你有很好的所有语言实现,你会在SO上找到很多信息。

如果您的输入变化很大,那么请选择机器学习路线,但是您需要输入大量带有人工验证输出的输入进行培训,这可能很麻烦。

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