#geospatial #nlp #search-engine #search #memory-database #string-interning

bin+lib berlin-core

识别位置并将它们标记为 UN-LOCODEs 和 ISO-3166-2 子分区

6 个版本

0.2.6 2024 年 3 月 29 日
0.2.4 2024 年 3 月 16 日
0.2.3 2023 年 10 月 23 日
0.2.2 2023 年 6 月 18 日
0.2.0 2023 年 3 月 9 日

114地理空间

Download history 1/week @ 2024-06-30 15/week @ 2024-07-07 137/week @ 2024-07-28 4/week @ 2024-08-04

每月 141 次下载

MIT 许可证

46KB
1K SLoC

berlin

一个 Rust 包,用于识别位置并将它们标记为 UN-LOCODEs 和 ISO-3166-2 子分区。

描述

Berlin 是一个位置搜索引擎,它在一个内存中的所有 UN Locodes、子分区和州(国家)集合上运行。以下是主要的架构亮点:在启动时,Berlin 对位置执行基本的语言分析:将名称拆分为单词,删除变音符号,将非 ASCII 符号转写为 ASCII。例如,这允许我们在搜索“vegas”时找到“Las Vegas”。它采用字符串池化来优化内存使用并允许直接查找精确匹配。如果我们可以将搜索术语(部分)解析为现有的池化字符串,则意味着数据库中存在具有该名称的位置。

当用户提交搜索术语时,Berlin 首先对搜索术语进行初步分析:1)拆分为单词和单词对 2)尝试识别前者作为现有位置(可以解析为现有的池化字符串)并将它们标记为“精确匹配”。这从原始短语中创建了多个搜索术语。预过滤步骤。在这里我们做三件事 1)通过直接查找名称和代码表来解析精确匹配 2)通过有限状态转换器进行前缀搜索 3)通过启用 Levenshtein 距离的有限状态转换器进行模糊搜索。预过滤的结果通过字符串相似度评估算法进行排序并按分数排序。低于阈值的以下结果被截断。从上一步骤中找到的位置构建一个图,以便如果可能的话将它们分层链接。这进一步提高了某些位置。例如,如果用户搜索“new york UK”,则将提高林肯郡的位置,并且它将比美国的纽约市显示得更高。也可以请求仅在特定国家中进行搜索(对于英国默认启用)

柏林能够以高语义精度找到位置。速度大约为每非匹配词(或拼写错误)10-15毫秒,每精确匹配1毫秒。包含一个精确匹配(不区分大小写)的简短查询通常小于10毫秒。一个包含8个单词的复杂查询通常小于100毫秒,而测试套件中的所有实际查询都小于50毫秒,中位数小于30毫秒。

该架构允许在10毫秒内轻松实现即写即搜建议,如果需要的话。

许可证

由Flax & Teal Limited为ONS Alpha和ONS Beta项目准备。版权©2022-2023,ONS数字(https://www.ons.gov.uk

在MIT许可证下发布,有关详情请参阅LICENSE

依赖关系

约14MB
约202K SLoC