algorithm - 给定大量街道名称,测试文本是否包含该组街道名称中的一个街道名称的最有效方法是什么?

标签 algorithm nlp

我有一个有趣的问题需要帮助。我目前正在开发我的程序的一个功能,但无意中遇到了这个问题

  1. 我在数据库中存储了大量印度尼西亚的街道名称(> 100k 行), 每个街道名称可能有 1 个以上的单词。例如:“Sudirman”、“Gatot Subroto”或“Jalan Asia Afrika”都是合法的街道名称

  2. 在数据库中有一堆文本(> 100 万行),我将它们拆分成句子。现在,我需要做的功能(准确地说是功能)是测试句子中是否有街道名称,所以只是一个真/假测试

    我尝试通过执行以下步骤来解决它:

一个。将街道名称放入键值哈希中

将每个句子拆分成单词

测试单词是否在散列中

这很快,但不适用于多个单词

我想到的另一种替代方法是执行以下步骤:

一个。将每个句子拆分成单词

使用 LIKE 语句查询数据库(即 SELECT #### FROM street_table WHERE name like '%word%' )

如果查询返回一行,则表示该句子包含街道名称

现在,这个解决方案将是一个非常 IO 密集型的。

所以我的问题是“做这个测试最有效的方法是什么”?无论编程语言如何。我主要是用 python 做的,但是只要我能掌握概念,任何语言都可以

============编辑 1 =================

这是定期的吗?

是的,我会以 1 分钟的间隔调用此功能。每次调用至少需要 100 行文本,并根据街道名称数据库进行测试

最佳答案

一个简单的解决方案是创建一个字典/multimap,其中包含第一个单词的街道名称=>完整的街道名称。当您重复句子中的每个单词时,您将查找可能的街道名称,并检查是否匹配(通过查看下一个单词)。

该算法应该相当容易实现,并且性能也应该相当不错。

关于algorithm - 给定大量街道名称,测试文本是否包含该组街道名称中的一个街道名称的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10979434/

相关文章:

algorithm - 为什么最大优先级队列没有 DECREASE-KEY?

C++添加对列表的元素

javascript - 基于一周内毫秒数的舍入算法

swift - MLDataTable 中 MLDataType 的值

dictionary - 文本文件中有任何公开可用的单词词典吗?

Java 需要解释我的词典顺序算法

algorithm - 算法导论 22.1-7 答案中的矛盾?

python - 使用 sklearn 获取单词的 tf-idf 权重

go - 如何计算文本中每个单词的出现次数

python - 通过删除表情符号来清理字符串