24个发布版本
0.7.0-alpha.3 | 2024年7月1日 |
---|---|
0.7.0-alpha.2 | 2023年6月26日 |
0.7.0-alpha.1 | 2023年2月28日 |
0.5.6 | 2022年9月14日 |
0.1.0 | 2021年7月21日 |
#223 in 算法
119 每月下载量
在 2 个crate中使用(通过 sigalign-impl)
84KB
2K SLoC
LtFmIndex
LtFmIndex
是一个Rust库,用于构建和使用包含模式第一个 k-mer 查找表的FM-index。此索引可用于(1)统计模式在索引文本中出现的次数,以及(2)定位模式的位置。
用法
添加到依赖项
要使用此库,将 lt_fm_index
添加到您的 Cargo.toml
[dependencies]
lt_fm_index = "0.7.0-alpha"
- 关于
fastbwt
功能- 此功能可以加速索引,但需要
cmake
来构建libdivsufsort
,且不能作为WASM构建。
- 此功能可以加速索引,但需要
示例代码
use lt_fm_index::LtFmIndex;
use lt_fm_index::blocks::Block2; // `Block2` can index 3 types of characters.
// (1) Define characters to use
let characters_by_index: &[&[u8]] = &[
&[b'A', b'a'], // 'A' and 'a' are treated as the same
&[b'C', b'c'], // 'C' and 'c' are treated as the same
&[b'G', b'g'], // 'G' and 'g' are treated as the same
];
// Alternatively, you can use this simpler syntax:
let characters_by_index: &[&[u8]] = &[
b"Aa", b"Cc", b"Gg"
];
// (2) Build index
let text = b"CTCCGTACACCTGTTTCGTATCGGAXXYYZZ".to_vec();
let lt_fm_index= LtFmIndex::<u32, Block2<u128>>::build(
text,
characters_by_index,
2,
4,
).unwrap();
// (3) Match with pattern
let pattern = b"TA";
// - count
let count = lt_fm_index.count(pattern);
assert_eq!(count, 2);
// - locate
let mut locations = lt_fm_index.locate(pattern);
locations.sort(); // The locations may not be in order.
assert_eq!(locations, vec![5,18]);
// All unindexed characters are treated as the same character.
// In the text, X, Y, and Z can match any other unindexed character
let mut locations = lt_fm_index.locate(b"UNDEF");
locations.sort();
// Using the b"XXXXX", b"YYYYY", or b"!@#$%" gives the same result.
assert_eq!(locations, vec![25,26]);
// (4) Save and load
let mut buffer = Vec::new();
lt_fm_index.save_to(&mut buffer).unwrap();
let loaded = LtFmIndex::load_from(&buffer[..]).unwrap();
assert_eq!(lt_fm_index, loaded);
仓库
https://github.com/baku4/lt-fm-index
API文档
参考
- Ferragina, P.,等. (2004). 一个字母友好的FM-索引,Springer Berlin Heidelberg: 150-160。
- Anderson, T. 和 T. J. Wheeler (2021). 优化核苷酸和氨基酸搜索的FM-index库,Cold Spring Harbor Laboratory。
- 王宇,李翔,张栋,谭戈,孙宁 (2018). 加速FM-index搜索用于基因组数据处理,ACM。
- Yuta Mori.
libdivsufsort
依赖项
~18MB
~311K SLoC