gpt4 book ai didi

string - Delphi-如何搜索不完整的字符串匹配项

转载 作者:行者123 更新时间:2023-12-03 19:30:52 25 4
gpt4 key购买 nike

我列出了大约300,000家企业,这是一个小型关系rdbms(ComponentAce的AbsoluteDB)中的varchar字段。用户需要能够搜索企业名称,但是用户可能没有确切的名称。

例如,名称是堪萨斯国家银行

理想情况下,用户可以开始输入National并找到所有包含National的字符串(注意它不是第一个单词)
我希望有一种方法允许用户键入“国家银行”(而不是国家银行),并且仍然可以找到合适的数据。

在试图弄清楚这一点时,我认为文本检索系统的功能远远超出了我的期望。我的整个数据文件约为15 MB。全文检索系统的开销超出了我的需求。使用某种类型的字符串相似性算法的模糊搜索是我想要的方式吗?例如,像DamerauLevenshtein这样的东西?

最佳答案

我过去解决此问题的方法是创建一个倒排索引,消除高频单词(a,and,the,with等),然后执行以下操作:


根据每个单词的输入进行线性匹配;
去除元音;要么
使用Soundex。


尽管此方法是实时过滤的理想选择,但是否搜索输入的每个字符都取决于您。 (要点是,您没有在键入的每个字符上访问数据库。您在前几个字符之后单击了数据库,然后从结果中过滤了其余字符。)

我已经使用内存中的搜索表以及数据库表来做到这一点。

对于倒排索引,您可以将所有内容分解为多个单词,并为每个单词保存记录编号列表。当人员键入“ natio”时,它会显示与以“ natio”开头的任何单词匹配的所有记录的列表,例如“ nation”,“ nations”,“ national”等。因此,“ national”可以在25条记录中,“民族”可能在37条中,“民族”可能在58条中。显然,词干越长,命中数越少。

如果他们输入多个单词,则将每个单词视为一个单独的搜索,但将结果与在一起。因此,“国家”和“银行”只会在两个词干同时被发现的情况下显示结果。

确实不是那么困难。首先列出数据库中所有单词的列表以及它们的频率计数。消除所有无意义的高频词,以及所有其他意义不大的词。然后从其余部分建立一个倒排索引。

如果数据变化非常频繁,则保留无意义的单词列表,并在通过先删除这些单词来更新反向单词索引之后自动重建反向索引。

结果并没有那么大,如果正确实现,它应该运行得很快。

我从未见过这样的情况,即在其中使用带有LIKE的SQL查询的速度几乎与这种方法一样快。

关于string - Delphi-如何搜索不完整的字符串匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24072363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com