我的用户将通过剪切导入并粘贴包含公司名称的大字符串。
我有一个公司名称的现有且不断发展的MYSQL数据库,每个数据库都有一个唯一的company_id。
我希望能够解析字符串并为每个用户输入的公司名称分配模糊匹配。
现在,仅进行直线字符串匹配也很慢。 Soundex索引编制会更快吗?我如何在用户输入时给他们一些选择?
例如,某人写道:
微软->微软
裸机必备->裸机必备
Polycom,Inc.-> Polycom
我发现以下线程似乎与此问题相似,但是发布者尚未批准,并且不确定它们的用例是否适用:
如何在大型字符串数据库中找到字符串的最佳模糊匹配
在Java中匹配不精确的公司名称
您可以从开始使用SOUNDEX()
,这可能会满足您的需要(我为用户键入的内容提供了一个自动建议框,其中包含已有的替代方案)。
的缺点SOUNDEX()
是:
例:
SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')
/* all of these return 'M262' */
对于更高级的需求,我认为您需要查看两个字符串的Levenshtein距离(也称为“编辑距离”)并使用阈值。这是较复杂(较慢)的解决方案,但它具有更大的灵活性。
主要缺点是,您需要两个字符串来计算它们之间的距离。使用SOUNDEX,您可以将预先计算的SOUNDEX存储在表中,然后在该表上进行比较/排序/分组/过滤。使用Levenshtein距离,您可能会发现“
Microsoft”和“ Nzcrosoft”之间的差异仅为2,但是要花费更多的时间才能得出该结果。
无论如何,可以在codejanitor.com上找到MySQL的示例Levenshtein距离函数:作为MySQL存储函数的Levenshtein距离(2007年2月10日)。
下面列出XML布局 我想实现排序功能,在那里用户可以排序公司名称升序和降序,我如何实现它?
问题内容: 我刚刚开始探索Elasticsearch。我创建了一个文档,如下所示: 我现在尝试对Levenshtein距离为5的名称字段进行模糊搜索,如下所示: 但是它没有返回任何匹配。我希望圣路易斯的记录能归还。我该如何解决我的查询? 谢谢。 问题答案: 您的查询存在的问题是,最大编辑距离为2。 在上述情况下,您可能想要做的是将St.改为Saint 的同义词,这将与您匹配。当然,这将取决于您的数
问题内容: 我已经在线阅读了文档和各种教程,但是我对regex在Java中的工作方式仍然感到困惑。我正在尝试做的是创建一个接受字符串类型参数的函数。然后,我想检查传递的字符串是否包含MDCLXVIivxlcdm以外的任何字符。因此,例如,字符串“ XMLVID”应返回false,而“ ABXMLVA”应返回true。 当我通过时,“ XMLIVD”,“ ABXMLVA”和“ XMLABCIX”
问题内容: 当我尝试使用自动加载和命名空间时出现此错误: 致命错误:* 在 第10行的 /usr/local/www/apache22/data/public/php5.3/test.php中 找不到类’Class1’ * 谁能告诉我我在做什么错? 这是我的代码: Class1.php: test.php: 问题答案: Class1不在全局范围内。 请参见下面的工作示例: 编辑(2009-12-1
我相信这并不难,但我自己似乎想不出来。 然后再次执行时,它将是类似name4、name1、name2、name5等等的内容......
问题内容: 我有两个要基于列合并的DataFrame。但是,由于其他拼写方式,空格数量不同,不存在变音符,只要它们彼此相似,我希望能够合并。 任何相似性算法都可以使用(soundex,Levenshtein,difflib)。 假设一个DataFrame具有以下数据: 然后我想得到结果DataFrame 问题答案: 类似建议,你可以申请的到df2的指标,然后应用: 如果这些是列,则可以按照相同的方