【问题标题】:Updateable DAWG library or DAWG construction from non-sorted data可更新的 DAWG 库或未排序数据的 DAWG 构造
【发布时间】:2013-08-30 11:30:49
【问题描述】:

dawgdic 是一个很棒的 DAWG 库,但它有一个明显的缺点,因为它是静态的(不可更新)并且必须以按字母顺序排序的字符串构造。如果构建 DAWG 的原始数据很大(数 GB),那么涉及对大量字符串进行排序的 DAWG 初始构建可能需要太多资源。

是否有一个库提供像dawgdic 这样的内存高效结构,它允许从非排序字典进行构造?

【问题讨论】:

    标签: c++ nlp trie dawg


    【解决方案1】:

    目前,我认为没有任何库允许从未排序的字典构建 DAWG。

    但是,经过大量搜索,我找到了这篇论文,"Incremental Construction of Minimal Acyclic Finite-State Automata" ,我认为它正是你想要的。或许你可以在读完这篇文章后自己制作一个库,分享给大家!

    编辑:你看过this question吗?

    【讨论】:

    • 感谢您的论文,虽然我可能没有时间编写自己的库。
    【解决方案2】:

    我发现了一些很棒的库,它们允许从未排序的数据进行在线构建,尽管它们不是基于 DAWG:

    1. cedar - 一个非常快的双数组树
    2. marisa-trie - 一个非常节省空间的字符串匹配库

    【讨论】:

      【解决方案3】:

      我目前知道没有支持从非排序数据构建的 DAWG 的 C++ 实现,但是如果您愿意创建自己的具有此类功能的解决方案,Incremental Construction of Minimal Acyclic Finite-State Automata (2000) 是一篇基本上列出的论文它背后的算法。

      或者,如果您愿意从其他语言移植解决方案,那么不妨看看 MDAG,这是一种数据结构的 Java 实现。它支持即时字符串添加和字符串删除,这正是您正在寻找的。代码也很容易理解,并且有大量注释,因此移植它应该是一项相当简单的任务。

      免责声明:我是 MDAG 的作者 :)。

      【讨论】:

        猜你喜欢
        • 2011-12-14
        • 2013-03-27
        • 2015-05-12
        • 2015-02-16
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 2013-10-15
        • 1970-01-01
        相关资源
        最近更新 更多