我怎么能匹配两个字符串,即使它们是1个字符不同?

时间:2012-10-29 00:13:00

标签: php mysql

我有一个庞大的句子数据库,还有一个问题,就是“我很好”这样的句子与“我很好”不匹配,反之亦然或“是我的?”当我希望它们被检测为匹配时,不匹配“是我的”,反之亦然。

我已经制作了复杂而混乱的功能,试图通过通配符和研究来实现这一点,但它只是一团糟。并且我确定必须有一种方法来搜索这个1字符的lee方式。如果我能够控制哪些角色得到这样的方式,就像在我的例子中主要的问题原因是问号和半引号。 (?')。

我目前正在使用php和mysql进行平面选择查询来进行匹配查询。

我希望得到一些帮助来解决这个问题,这样我就可以清理目前执行工作的大量代码。

如果有人想看到匹配的代码查询检查是这样的:

$checkqwry = "select * from `eng-jap` where (eng = '$eng' or english = '$oldeng' or english = '$oldeng2') and (jap = '$jap' or japanese = '$oldjap' or japanese = '$oldjap2');";

查询的目的是检查数据库中是否已经存在$ eng和$ jap的翻译。你看到$ oldeng $ oldeng2和$ oldeng3等等的原因就像我说的那样,即使有问号或者不是问号,我的混乱愚蠢尝试也是如此。其中一些$ oldeng变量有问号或半引号等等,而其他变量没有。上面添加了更多代码并删除了问号和内容。是的它是一个大混乱。

4 个答案:

答案 0 :(得分:1)

在比较字符串之前,简单地删除非字母数字字符可能更好。

答案 1 :(得分:1)

如上所述,您希望使用String Metric算法,PHP在http://php.net/manual/en/function.levenshtein.php以及http://www.php.net/manual/en/function.similar-text.php中内置了此功能。

MySQL本身没有实现这个(特定的算法),但有些人已经开始编写存储过程来实现相同的目标:http://www.artfulsoftware.com/infotree/queries.php#552

在我看来,使用可以处理任意更改的字符串度量更好,然后删除标点符号,还可以捕获遗漏,转置等...

答案 2 :(得分:0)

您可以使用sql中的replace函数将“'”替换为“”和“?”用“”。

答案 3 :(得分:0)

您可能希望查看MySQL中的natural language full text searches。将一个FULLTEXT索引添加到eng列。

 ALTER TABLE `eng-jap` ADD FULLTEXT INDEX `full` (`eng`) ;

然后,使用匹配功能:

 select * from `eng-jap` where match(eng)  against ('Im happy');

这将返回我很高兴我很高兴

如果您选择相关性得分如下:

  select id, match(eng)  against ('Im happy') from `eng-jap` where match(eng)  against ('Im happy');

您可以使用它来进一步处理PHP和过滤器中的匹配。

[编辑]:刚刚确认昨天昨天的相关性得分也相同:

 select *, match(eng)  against ('yesterday') as mc from `eng-jap`

结果是:

  6, yesterday?, 0.9058732390403748
  7, yesterday, 0.9058732390403748

注意:要应用全文索引,您的mysql引擎必须是MyISAM。此外,句子必须包含3个以上的字符。索引似乎与“是”之类的单词不匹配。