8 个版本
0.2.6 | 2023年9月26日 |
---|---|
0.2.5 | 2022年9月10日 |
0.2.4 | 2020年7月15日 |
0.2.3 | 2019年8月15日 |
0.1.0 | 2019年7月9日 |
#1 in #libpostal
21KB
447 代码行,不含注释
rust-postal
libpostal 街道地址解析/归一化 C 库的绑定。
此库提供由 rust-lang/rust-bindgen 生成的 Rust <-> C 绑定,并在其上提供直观且安全的 Rust API。
此软件包需要 Rust 1.60 或更高版本。
安装
按照 openvenues/libpostal 中的 README 指令安装您平台的共享库。目前,当您的项目运行时,编译对象是动态链接的 - 未来可能会支持静态链接。
将 postal
添加到您的 Cargo.toml
将以下内容添加到您的 Cargo.toml 中
[dependencies]
postal = "0.2"
接下来,将以下内容添加到您的软件包中
extern crate postal;
使用示例(expand_address)
注意:libpostal
不是线程安全的。因此,每个进程不要创建多个 postal::Context
。 Context::expand_address
和 Context::parse_address
进行内部锁定,可以并发调用。
这是使用 expand_address
API 的示例
extern crate postal;
use postal::{Context, InitOptions, ExpandAddressOptions};
// initialize a context to work with
let mut ctx = Context::new();
// enable address expansion for this context
ctx.init(InitOptions{expand_address: true}).unwrap();
// these options are safe to persist and reuse between calls to `expand_address`
let mut opts = ExpandAddressOptions::new();
// (optional) set languages; this can improve runtime performance significantly, approximately 30% in benchmarks
opts.set_languages(vec!["en"].as_slice());
// expand a single address into a `postal::Expansions` iterator
let exps = ctx.expand_address(
"1234 Cherry Ln, Podunk TX", &mut opts)
.unwrap();
for e in exps {
dbg!(e);
}
这是使用 parse_address
API 的方法
extern crate postal;
use postal::{Context, InitOptions, ParseAddressOptions};
// initialize a context to work with
let mut ctx = Context::new();
// enable address parsing for this context
ctx.init(InitOptions{parse_address: true}).unwrap();
// these options are safe to persist and reuse between calls to `parse_address`.
// Note: `language` and `country` are technically options that libpostal will accept
// for purposes of parsing addresses, but it ignores them at present.
let mut opts = ParseAddressOptions::new();
// parse a single address into a `postal::Components` iterator
let comps = ctx.parse_address(
"1234 Cherry Ln, Podunk TX", &mut opts)
.unwrap();
for c in comps {
dbg!(c);
}
有关更多示例和用法,请参阅测试或基准测试。
开发设置
这将构建 bindgen
绑定,运行测试,并运行基准测试。
cargo build
cargo test -- --nocapture --test-threads 1
cargo bench
注意:由于 libpostal
是单线程的,因此需要 --test-threads 1
。
发布历史
-
0.2.6
- 更新 bindgen 和 parking_lot,用 bindgen 的格式化器替换过时的 rustfmt_bindings
-
0.2.2
- 解决由于未绑定 Mutex guard 而引起的锁定问题。
-
0.2.1
- 使组件字段公开。
-
0.2.0
- 添加了
parse_address
支持。
- 添加了
-
0.1.0
- 首次发布。
元数据
在 MIT 许可证下分发。有关更多信息,请参阅 LICENSE
。
贡献
- 将其分支(https://github.com/pnordahl/rust-postal/fork)
- 创建您的功能分支(
git checkout -b feature/fooBar
) - 提交您的更改(
git commit -am 'Add some fooBar'
) - 推送到分支(
git push origin feature/fooBar
) - 创建一个新的Pull Request
依赖项
~0.5–7.5MB
~49K SLoC