fuzzy searching an array in php

霸气de小男生 提交于 2019-12-21 02:43:24

问题


after i searched i found how to do a fuzzy searching on a string

but i have an array of strings

$search = {"a" => "laptop","b" => "screen" ....}

that i retrieved from the DB MySQL

IS there any php class or function that does fuzzy searching on an array of words

or at least a link with maybe some useful info's

i saw a comment that recommend using PostgreSQL

and it's fuzzy searching capability but

the company had already a MySQL DB

Is there any recommendation ??


回答1:


Look at the Levenshtein function

Basically it gives you the difference (in terms of cost) between to strings. I.e. what is the cost to transform string A into string B.

Set yourself a threshold levenshein distance and anything under that for two words mean they're similar.

Also the Bitap algorithm is faster since it can be implemented via bitwise operators, but I believe you will have to implement it yourself, unless there is a PHP lib for it somewhere.

EDIT To use levenshtein method:

The search string is "maptop", and you set your "cost threshold" to say 2. That means you want any words that are two string transform operations away from your search string.

so you loop through your array "A" of strings until

levenshtein ( A[i] , searchString ) <= 2

That will be your match. However you may get more than one word that matches, so it is up to you how you want to handle the extra results.




回答2:


You could do this in MySQL since you already have a MySQL database - How do I do a fuzzy match of company names in MYSQL with PHP for auto-complete? which mentions the MySQL Double Metaphone implementation and has an implementation in SQL for MySQL 5.0+

Edit: Sorry answering here as there is more than could fit in a comment…

Since you've already accepted an answer using PHP Levenshtein function then I suggest you try that approach first. Software is iterative; the PHP array search may be exactly what you want but you have to test and implement it first against your requirements. As I said in your other question a find as you type solution might be the simplest solution here, which simply narrows the product as the user types. There might not be a need to implement any fuzzy searching since you are using the User to do the fuzzy search themselves :-)

For example a user starts typing S, a, m which allows you to narrow the products to those beginning with Sam. So you are always only letting the user select a product you already know is valid.



来源:https://stackoverflow.com/questions/6896855/fuzzy-searching-an-array-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!