#symbol-table #nlp #values #mapping #integer #lookup #lexicon

symbol-map

从值到整数标识符的高效映射(即词汇表或符号表),具有快速双向查找选项

3 个稳定版本

使用旧的 Rust 2015

1.0.2 2017 年 5 月 7 日
1.0.1 2017 年 2 月 20 日
1.0.0 2016 年 9 月 9 日

#1274数据结构

每月 23 次下载

Apache-2.0

38KB
731

概述

这个软件包提供了一种将任意类型 T 的值与另一个任意类型 S 的值(“符号”)关联起来的方法。典型用例涉及不如 S 类型值方便处理的 T 类型值,其中 T 的身份很重要,但其值不重要。例如,许多自然语言处理流程的第一步是构建从标记字符串到从 0 开始的密集整数范围的映射,以便它们可以非常快速地进行比较,并用于索引简单的数据结构,如向量或数组。

您可以通过以下结构获得这个包的大部分功能

pub struct Table<T> where T: Hash + Eq {
    // Mapping from T to usize.
    by_symbol: HashMap<T, usize>,
    // Mapping from usize to T.
    by_id: Vec<T>,
}

但是,这样您就维护了每个 T 的两个副本。您可以求助于一个 HashMap<Rc<T>, usize>Vec<Rc<T>>,但这会使您不得不付出引用计数的代价,并且难以在线程之间共享。使用 Arc 而不是 Rc 使您的类型 Send 化,但这比使用 Rc 的开销更大。

或者,您可以使用 symbol_table::HashIndexing<Data=T, SymbolId=usize> 并获取一个类型,当 TSendSync 时,它是 SendSync,并且每个关联中只拥有一个 T

有关示例用法和更多技术细节,请参阅 rustdoc

版权

版权所有 2016,Donald S. Black。

本文件受Apache许可证2.0版(以下简称“许可证”)许可;除非遵守许可证,否则不得使用此文件。您可以在以下链接获取许可证副本:https://apache.ac.cn/licenses/LICENSE_2.0

除非适用法律要求或书面同意,否则根据许可证发布的软件按“原样”提供,不提供任何形式的保证或条件,无论是明示的还是默示的。有关许可证管理权限和限制的具体语言,请参阅许可证。

无运行时依赖