可从未排序的数据更新DAWG库或DAWG构造

时间:2013-08-27 15:48:50

标签: c++ nlp trie dawg

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

是否有一个库提供了一个内存有效的结构dawgdic,允许从非排序字典构建?

3 个答案:

答案 0 :(得分:2)

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

但是,经过大量的搜索,我发现了这篇论文"Incremental Construction of Minimal Acyclic Finite-State Automata" ,我认为这篇文章正是你想要的。也许你可以在阅读之后创建自己的图书馆,并与大家分享!

编辑:您看过this question了吗?

答案 1 :(得分:1)

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

  1. cedar - 一个非常快速的双阵列特里
  2. marisa-trie - 非常节省空间的字符串匹配库

答案 2 :(得分:0)

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

或者,如果您愿意从其他语言移植解决方案,那么查看MDAG(数据结构的Java实现)可能是值得的。它支持动态字符串添加和字符串删除,这正是您正在寻找的。代码也很容易理解,并且进行了广泛的评论,所以移植它应该是一个相当简单的任务。

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