【发布时间】:2010-05-17 14:17:27
【问题描述】:
有很多用于脚本的解析器和词法分析器(即结构化计算机语言)。但我正在寻找一个可以将(几乎)非结构化文本文档分成更大部分的文档,例如章节、段落等。
识别它们相对容易:目录、致谢或正文从哪里开始,并且可以构建基于规则的系统来识别其中的一些(例如段落)。
我不希望它是完美的,但是有人知道如此广泛的“基于块”的词法分析器/解析器吗?或者你能指出我可能有帮助的文学方向吗?
【问题讨论】:
有很多用于脚本的解析器和词法分析器(即结构化计算机语言)。但我正在寻找一个可以将(几乎)非结构化文本文档分成更大部分的文档,例如章节、段落等。
识别它们相对容易:目录、致谢或正文从哪里开始,并且可以构建基于规则的系统来识别其中的一些(例如段落)。
我不希望它是完美的,但是有人知道如此广泛的“基于块”的词法分析器/解析器吗?或者你能指出我可能有帮助的文学方向吗?
【问题讨论】:
许多轻量级标记语言,如 markdown(偶然使用 SO)、reStructured text 和(可以说)POD 与您所说的类似。它们具有最少的语法并将输入分解为可解析的语法片段。您可以通过阅读它们的实现来获得一些信息。
【讨论】:
如果你真的想走这条路,我可以详细说明。但这将是大量的工作。
【讨论】:
大多数lex/yacc 类型的程序都使用定义明确的语法。如果您可以按照BNF 类似的格式(大多数解析器接受类似的语法)来定义您的语法,那么您可以使用它们中的任何一个。这可能是显而易见的。但是,您仍然可能对作为语法一部分的文本“块”(标记)有些模糊。毕竟你为你的令牌定义了规则。
我过去曾使用过Parse-RecDescent Perl module,在类似项目中取得了不同程度的成功。
对不起,这可能不是一个好的答案,但更多地分享我在类似项目上的经验。
【讨论】: