【问题标题】:Can a DAWG be used to store word related information?可以使用 DAWG 存储单词相关信息吗?
【发布时间】:2012-12-11 02:34:04
【问题描述】:

是否可以使用 DAWG 存储与每个路径相关的辅助信息,例如一个单词在英语中出现的频率?如果是,那我该怎么做?

【问题讨论】:

    标签: c++ data-structures dawg


    【解决方案1】:

    是的,一般来说,有向无环加权图 (DAWG) 可以通过节点、边或更复杂的结构进行注释,例如给定路径,我将采用一系列节点和边。您可以对现有结构进行子类化以包含此信息,或者如果这不可能,您可以从结构散列到注释。

    【讨论】:

    • 你能详细说明一下吗?我认为这比你想象的要微妙一些。您不一定要唯一地存储一个单词的每个节点或每个边缘的信息,因为如果您这样做了,那么您可能会意外地让多个不同的单词共享该信息。如果您要单独存储每个节点或每个路径的所有信息,则您实际上已将 DAWG 扩展为 trie,从而完全消除了效率提升。
    • ^^ 我也有同样的问题。你能举个例子吗?
    • 公平地说,我按字面意思回答了这个问题:“可以在有向加权无环图中注释路径”。是的,一个可以。 “一个人可以在有向加权无环图中有效地注释路径,特别是与其他实现进行比较吗?”可能不会。总体而言,扩展问题以向其他人提供有关意图的更多背景信息可能会很好。
    【解决方案2】:

    通常,您不能像在 trie 或其他数据结构中那样在 DAWG 中存储每个单词的信息。原因是 DAWG 中的多个不同单词可能都共享节点,因此一个单词的信息可能会“泄漏”到其他单词的信息中。

    作为一个简单的例子,假设我们有一个 DAWG 用于单词“is”、“as”、“i”和“a”。在这种情况下,DAWG 将如下所示:

                         START
                      a /     \ i
                       ACC    ACC
                     s  \     / s                        
                          ACC
    

    请注意,表示单词“as”和“is”的节点是完全相同的节点。因此,如果您要尝试用信息注释单词“as”,则保存该信息的节点也将与“is”的节点相同,这意味着“as”和“is”都会选择相同的一组信息。

    您可以尝试通过在节点中存储“as”和“is”的映射来解决此问题,该映射从以该节点结尾的单词映射到有关该单词的额外信息,但这会大大增加DAWG。您现在将每个字符存储在单词中,因此您的内存使用量将大幅增加(请记住,DAWG 的全部目的是减少存储一组单词所需的内存使用量)。你最好只存储一个从单词到信息的哈希表。

    您可能会尝试存储此信息的另一个选项是将通过 DAWG 的每条路径展开到其自己的分支中,以便不同单词的节点始终不同。但是,这种方法的问题在于,您正在有效地将 DAWG 转换回 trie,这会显着增加所涉及的内存使用量。

    简而言之,在不显着增加内存使用量的情况下,没有直接的方法可以使用元信息对 DAWG 中的单词进行注释。如果必须这样做,最好使用不同的数据结构。

    希望这会有所帮助!

    【讨论】:

    • 您会建议哪种数据结构?我应该去试试吗?人们谈论trie的内存使用情况?但是我不能喜欢构建特里树然后保存它吗?不要一次又一次地建造它。另外内存问题有那么大吗?
    • 在线参考建议对DAWG使用这种方法:“由于DAWG的终端节点可以通过多条路径到达,DAWG不能直接存储与每条路径相关的辅助信息,例如单词的频率在英语语言中。但是,如果在每个节点上存储从该点通过结构的唯一路径数的计数,我们可以使用它来检索单词的索引,或给定索引的单词。[1]然后可以将辅助信息存储在一个数组中。”
    【解决方案3】:

    是的,你可以。从 dawg 开始到单词结尾的每条路径都是唯一的,并且该路径可以索引为整数。然后可以将该索引号映射到辅助信息。

    在此处查看论文:http://www.ic.unicamp.br/~reltech/1992/92-01.pdf 在这里查看一个好的实现:https://github.com/WojciechMula/pyDAWG/blob/master/dawg_mph.c#L37

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 2016-02-25
      • 2015-02-16
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      相关资源
      最近更新 更多