【发布时间】:2013-07-03 17:15:10
【问题描述】:
我有一些纯文本有点结构化的剧本,格式类似于本文末尾的示例。我想将每个解析为某种格式:
- 很容易只调出涉及特定地点的舞台指示。
- 很容易调出属于特定角色的对话。
我能想到的最明显的方法是使用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 不是最佳实践,我愿意接受这种类型的文本处理任务的最佳实践。谢谢。
【问题讨论】:
-
您是否要在网站上实时执行此操作?使用 jQuery 的唯一原因是,如果有人在文本框中输入剧本并获得即时的舞台指导输出。
-
@ChristianStewart:如果我正确理解 OP,他建议使用 jQuery 的原因是它是基于类或 id 信息提取 (X)HTML 节点内容的好工具。如果你有一把锤子,一切看起来都像钉子;)
-
剧本是我下载的文本文件,不需要实时或在线进行。 @dodgethesteamroller 是对的,这是一个锤子反模式,我试图通过在这里寻求更好的想法来避免它。
-
这是一个非常有趣的问题。正则表达式和 jQuery 确实是迂回曲折,但我认为您总体上有一个好主意 — 将半结构化输入转换为带有不同标签的 XML,以指示剧本的语义(方向、对话、cmets 等)。您可能已经查看了有关自然语言处理的其他 SO 问题,并且看到那里的库更倾向于将自然语言文本逐字拆分为词性,这并不是您真正需要的。我倾向于 Python 和
pyparsing。
标签: text nlp semantic-markup searchable