【问题标题】:lexers / parsers for (un) structured text documents [closed](非)结构化文本文档的词法分析器/解析器[关闭]
【发布时间】:2010-05-17 14:17:27
【问题描述】:

有很多用于脚本的解析器和词法分析器(即结构化计算机语言)。但我正在寻找一个可以将(几乎)非结构化文本文档分成更大部分的文档,例如章节、段落等。

识别它们相对容易:目录、致谢或正文从哪里开始,并且可以构建基于规则的系统来识别其中的一些(例如段落)。

我不希望它是完美的,但是有人知道如此广泛的“基于块”的词法分析器/解析器吗?或者你能指出我可能有帮助的文学方向吗?

【问题讨论】:

    标签: parsing document lexer


    【解决方案1】:

    许多轻量级标记语言,如 markdown(偶然使用 SO)、reStructured text 和(可以说)POD 与您所说的类似。它们具有最少的语法并将输入分解为可解析的语法片段。您可以通过阅读它们的实现来获得一些信息。

    【讨论】:

    • 我忘记了 POD!我真正需要的是 POD、markdown 和 reStructured text 的组合。他们肯定给了我一些指示。看起来我必须自己建造。
    • 您是否已经有文本或者您想从头开始?也许您可以将现有文档(如果有的话)转换为 ReSt 或其他东西并使用 stock parser?
    • 问题是我们不知道新传入的文档会是什么样子。我们知道我们设想的过程将只是半自动的。我怀疑从原始副本构建可解析文档会更容易,然后我们可以将其用作任何相关格式化程序的源
    • 那么,像我提到的那样的轻量级格式将是您的正确起点。尝试使用其中之一进行解析,它可能会抱怨语法错误,但会进行 一些 处理。祝你好运!
    【解决方案2】:
    1. 定义注释标准,指明您希望如何分解。
    2. 继续访问 Amazon Mechanical Turk,让人们使用您的注释标准标记 10K 文档。
    3. 根据这些训练数据训练 CRF(类似于 HMM,但更好)。

    如果你真的想走这条路,我可以详细说明。但这将是大量的工作。

    【讨论】:

      【解决方案3】:

      大多数lex/yacc 类型的程序都使用定义明确的语法。如果您可以按照BNF 类似的格式(大多数解析器接受类似的语法)来定义您的语法,那么您可以使用它们中的任何一个。这可能是显而易见的。但是,您仍然可能对作为语法一部分的文本“块”(标记)有些模糊。毕竟你为你的令牌定义了规则。

      我过去曾使用过Parse-RecDescent Perl module,在类似项目中取得了不同程度的成功。

      对不起,这可能不是一个好的答案,但更多地分享我在类似项目上的经验。

      【讨论】:

      • Lucene 不是一个索引器吗?它真的“解析”什么吗?
      • 你是对的。我想我更多的是在考虑“Lucene Analyzer”会给你带来的那种功能......并且可能也假设了太多的问题。如果您认为它具有误导性,请告诉我。
      • 我得出了这个结论,但作为最后的手段,我问了这个问题。我们或许能够以某种形式的 BNF 定义我们的文档,然后我们可以使用它来解析它们。
      【解决方案4】:

      尝试:pygmentsgeshiprettify

      他们几乎可以处理您扔给他们的任何东西,并且非常宽容您的语法和文档中的错误。

      参考:
      gitorius 使用美化,
      github使用pygments,
      rosettacode使用geshi,

      【讨论】:

        猜你喜欢
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-19
        • 2017-07-12
        • 1970-01-01
        • 2019-07-29
        • 1970-01-01
        相关资源
        最近更新 更多