相关疑难解决方法(0)

如何在大型字符串数据库中找到字符串的最佳模糊匹配

我有一个字符串数据库(任意长度),它拥有超过一百万个项目(可能更多).

我需要将用户提供的字符串与整个数据库进行比较,并检索相同的字符串(如果存在)或以其他方式返回最接近的模糊匹配(60%相似性或更好).理想情况下,搜索时间应小于一秒.

我的想法是使用编辑距离将每个数据库字符串与搜索字符串进行比较,然后根据数据库的长度缩小数据库中的候选项.

但是,因为我需要经常执行此操作,所以我正在考虑构建db字符串的索引以保留在内存中并查询索引,而不是直接查询db.

有关如何以不同方式解决此问题或如何构建内存中索引的任何想法?

fuzzy-search string-search

20
推荐指数
2
解决办法
1万
查看次数

使用soundex()或metaphone()创建Mad Gab样式短语的算法

我正在尝试创建一个可以建议Mad Gab风格短语的算法.

输入是一组短语.我也有一组关键字,我想尽可能使用.目前,我的解决方案只是蛮力:

  • 循环短语(逐个字符)
    • 如果找到关键字
      • store关键字和分支(递归)
    • 增量字符数

但是,我遇到的问题是:

  • 复合关键字的帐户,例如"捕获"可以是"捕获","猫"+"奶酪"
  • 允许使用字面术语 - "the","and","one","two","three".
  • 如何建议不是关键字的术语.即当找不到关键字或文字时,重新回到类似系统字典的东西上.
  • 略过短语片段.现在它只是通过了一次.但是考虑一下这个短语以不匹配的东西开头但后面的几个字符包含匹配的情况.

我最熟悉PHP和MySQL.但是,如果能提供更好的解决方案,我对另一项技术持开放态度.

我也对任何其他建议感兴趣.特别是使用第二个参数metaphone()提出更难建议的方法.

php mysql soundex metaphone

14
推荐指数
1
解决办法
5975
查看次数

在Java中匹配不精确的公司名称

我有一个公司数据库.我的应用程序接收按名称引用公司的数据,但名称可能与数据库中的值不完全匹配.我需要将传入的数据与它所引用的公司进行匹配.

例如,我的数据库可能包含名称为"AB Widgets&Co Ltd."的公司.我的传入数据可能会引用"AB Widgets Limited","AB Widgets and Co"或"AB Widgets".

公司名称中的一些单词(AB Widgets)对于匹配比其他单词(Co,Ltd,Inc等)更重要.避免错误匹配很重要.

公司的数量足够小,我可以在记忆中维护他们的名字地图,即.我可以选择使用Java而不是SQL来查找正确的名称.

你会如何用Java做到这一点?

java matching

8
推荐指数
1
解决办法
7235
查看次数

Flex匹配许多数据库记录(类似Quicksilver或类似Launchy)

假设我有一个包含许多名称的数据库表.我想对这些名字进行"灵活匹配".我不确定"弹性匹配"是否适合使用,但现在让我们继续使用.已经有类似 讨论的"模糊匹配",但我不是拼音匹配很感兴趣.我对我称之为有序子集匹配感兴趣.

我希望它的工作类似于QuickSilver(OSX)或Launchy(Windows).以下是给定搜索字符串匹配的几个示例:

麻省理工学院中号 assachusetts nstitute的牛逼李有成
ffox˚F愤怒狐狸
OSX ⇒的Mac OS X
MS中号 ICRO 小号经常总公司

我的最终目标是拥有一个带有自动完成文本字段的网页,该字段是从服务器驱动的数据.

我相信通过结合jQuery LiveUpdate和/或jQuery QuickSelect的功能,我将在客户端获得足够的结果.

我需要帮助的地方在于如何最好地处理服务器端与大型表的Flex匹配.我有一些关于如何使用Quicksilver 评分 算法构建我自己的自定义索引的想法,也许还有一些排列索引逻辑,但如果其他东西可以随时使用,我宁愿不重新发明轮子.

总结: 对于具有多行的数据库表,获得快速弹性匹配的最佳方法是什么?

mysql sql database algorithm search

7
推荐指数
1
解决办法
1152
查看次数

使用模糊匹配搜索单个 MySQL 文本列

我有一个带有“名称”列 (VARCHAR(255)) 的 MySQL InnoDB 表,我希望用户能够搜索它,返回所有匹配的行。但是,我不能只使用 LIKE 查询,因为搜索需要允许用户输入与可用名称相似的名称(例如,以“The”为前缀,或者不知道正确的名称包含撇号)。

两个例子是:

DB 中的名称:'Rose and Crown'

应该匹配的可能搜索示例:“Rose & Crown”、“Rose and Crown”、“rose and Crown”、“The Rose and Crown”

DB 中的名称:'Diver's Inn'

应该匹配的可能搜索示例:'Divers' Inn'、'The Diver's Inn'、'Divers Inn'

我还希望能够通过“最接近的匹配”相关性对结果进行排名,尽管我不确定如何做到这一点(也许是编辑距离?)。

该表不太可能超过几千行,因此不扩展到数百万行的方法是好的。一旦输入,给定行的名称值将不会改变,因此如果需要昂贵的索引操作,那不是问题。

是否有可以执行此任务的现有工具?我看过 Zend_Search_Lucence 但它似乎专注于文档,而我只对搜索单个列感兴趣。

编辑:在 SOUNDEX 搜索中,这不会产生我想要的结果。例如:

SELECT soundex( 'the rose & crown' ) AS soundex1, soundex( 'rose and crown' ) AS soundex2;
soundex1    soundex2
T6265   R253265
Run Code Online (Sandbox Code Playgroud)

解决方案:最后我使用了 Zend_Search_Lucence ,只是假装每个名字实际上都是一个文档,这似乎达到了我想要的结果。我猜它在某种程度上是全文搜索,即使每个字符串最多只有 3-4 个单词。

php mysql sql search

5
推荐指数
1
解决办法
1万
查看次数