2013-12-19 67 views
2

这是一个非常基本的例子,即时消息试图做的事情。用字符串中的同义词代替单词

我有这个字符串。

$text = 'stackoverflow is intelligent';

移除停止词

$stopwords=array(
    'is', 
    'the', 
); 

$text = preg_replace($stopwords, "", $text);` 

输出:

计算器智能

后通过空间

爆炸字符串

$text = explode(" ", $text);

输出在阵列:

计算器,智能

现在我有2个字

$text[0]; // stackoverflow

$text[1]; // intelligent

在我的sql数据库中,我有3个colums。第一个是单词,第二个是她的同义词,第三个是单词leng的最短同义词。像这样:

word   synonym shortsynonym 

intelligent clever smart    

这是问题的最困难的部分:

第一步是检查从字符串words在数据库 的代名词在这种情况下,我们必须检查

$text[0]; // stackoverflow

$text[1]; // intelligent

检查都WE R之后因为$text[0]; // stackoverflow dosent有一个同义词,所以我们按原样离开。并且$text[1]; // intelligent的结果为正值。

检查后,我想在这种情况下与她的同义词执行数据库和replace搜索词intelligent,并ifwordshortest synonymshortestif字dosent有一个同义词保留原样更换。

possibility1: output: 'stackoverflow is smart' 
possibility2: output: 'stackoverflow is clever' 
possibility3: output: 'stackoverflow is intelligent' 
在这种情况下

返回输出将是后:

output: `stackoverflow is smart` 

(也许这是不是一个真正的问题要问在这里,但你从将不胜感激任何帮助。和对不起我的英文不好)

+1

那么究竟是什么*不*工作? –

+0

那么,你想让整个程序达到这个目标? –

+0

我不知道如何在数据库中执行搜索。第一步:检查一个词是否有同义词,如果不是,则按原样保留。步骤2:在步骤1中检查并且结果为肯定后,进行替换。 – mwweb

回答

0

检查我要在数据库中执行搜索,并在 取代这种情况下,聪明的她同义词词后,如果字有 最短的代名词最短取代,如果单词剂量具有 ,则同义词保持原样。

根据您在上面介绍的逻辑,相应的SQL将是:

$sql = "SELECT 
`word`, 
IF(NOT ISNULL(`shortsynonym`), `shortsynonym`, IFNULL(`synonym`, `word`)) as replacement 
FROM words 
WHERE `word` IN ('stackoverflow', 'intelligent')"; 

没有测试过,但上面的应该可以帮助你......

0

与问题该程序的设计或写入查询的实际机制?

如果是设计,如果它很小,可能需要考虑“同义词库”的大小,在程序开始时查询数据库并将结果加载到键值数组中可能更有意义。然后你可以使用数组而不是每次请求都打你的数据库。它也应该加快程序。

如果问题在于编写sql查询,您可能需要花时间在项目上阅读一些教程。我会为你的查询推荐PDO PHP 5.4,如果你了解它,它会使你的查询变得简单。

PDO PHP API

相关问题