这是我尝试做的一个非常基本的例子。
我有这个字符串。
$text = 'stackoverflow is intelligent';
$stopwords=array(
'is',
'the',
);
$text = preg_replace($stopwords, "", $text);`
输出:
stackoverflow智能
按空格爆炸后
$text = explode(" ", $text);
数组输出:
stackoverflow,智能
现在我有2个字
$text[0]; // stackoverflow
$text[1]; // intelligent
在我的sql数据库中,我有3个列。第一个是单词,第二个是她的同义词,第三个是最短的同义词。像这样:
word synonym shortsynonym
intelligent clever smart
这是问题的难点:
第一步是检查字符串中的words
是否在数据库中具有同义词
在这种情况下,我们必须检查
$text[0]; // stackoverflow
$text[1]; // intelligent
检查两者后,我们得出$text[0]; // stackoverflow
剂量有同义词所以我们保持原样。并且$text[1]; // intelligent
的结果为正。
检查后我想在数据库中执行搜索,replace
在这种情况下,intelligent
一词带有她的同义词,而if
word
有一个shortest synonym
} {}替换为shortest
,if
这个词有一个同义词保留原样。
possibility1: output: 'stackoverflow is smart'
possibility2: output: 'stackoverflow is clever'
possibility3: output: 'stackoverflow is intelligent'
在这种情况下返回输出后将是:
output: `stackoverflow is smart`
(也许这不是一个真正的问题在这里问,但是你们的任何帮助将不胜感激。并且抱歉我的英语不好)
答案 0 :(得分:0)
检查后我想在数据库中执行搜索并替换 在这种情况下,智能这个词与她的同义词,如果这个词有 最短的同义词替换为最短的,如果有剂量的话 同义词保持原样。
根据您上面提到的逻辑,适当的SQL将是:
$sql = "SELECT
`word`,
IF(NOT ISNULL(`shortsynonym`), `shortsynonym`, IFNULL(`synonym`, `word`)) as replacement
FROM words
WHERE `word` IN ('stackoverflow', 'intelligent')";
没有测试过,但上面应该帮助你...
答案 1 :(得分:0)
程序设计或编写查询的实际机制存在问题吗?
如果是设计,您可能需要考虑“同义词库”的大小(如果它很小),在程序开始时查询数据库并将结果加载到键值数组中可能更有意义。然后,您可以使用数组,而不是在每个请求上访问数据库。它也应该加快程序的速度。
如果问题在于编写sql查询,您可能需要花时间在项目上阅读一些教程。我推荐PDO PHP 5.4用于您的查询,如果您了解它,它会使您的查询变得简单。