2

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

我已经制作了复杂而混乱的函数,试图用通配符和研究来做到这一点,但这只是一个大混乱。而且我确定必须有一种方法可以使用这种 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

4 回答 4

1

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

于 2012-10-29T00:15:48.623 回答
1

您想使用上面提到的字符串度量算法,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

在我看来,使用可以处理任意更改的字符串度量比去除标点符号更好,并且还可以捕获遗漏、换位等......

于 2012-10-29T00:43:01.030 回答
0

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

于 2012-10-29T00:16:44.473 回答
0

您可能想查看 MySQL 中的自然语言全文搜索。将 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 个字符。该索引似乎与“是”之类的词不匹配。

于 2012-10-29T00:43:32.687 回答