用字符串中的同义词替换单词

时间:2013-12-19 17:25:05

标签: php mysql regex

这是我尝试做的一个非常基本的例子。

我有这个字符串。

$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 } {}替换为shortestif这个词有一个同义词保留原样。

 possibility1: output: 'stackoverflow is smart'
 possibility2: output: 'stackoverflow is clever'
 possibility3: output: 'stackoverflow is intelligent'

在这种情况下返回输出后将是:

 output: `stackoverflow is smart`

(也许这不是一个真正的问题在这里问,但是你们的任何帮助将不胜感激。并且抱歉我的英语不好)

2 个答案:

答案 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用于您的查询,如果您了解它,它会使您的查询变得简单。

PDO PHP API