如何求出相似的语句?类似GOOGLE的Did you mean?

jxyuhua 2006-06-20 03:42:57
用过GOOGLE都知道,当你搜索输入的关键字不是很准确的时候,Google会提示你:
Did you mean ... ?

自动给你列出个相似的句子。

我就是想问一下,如何才能根据你输入的关键字,求出与它相似的另一个字符串呢?
假设我要的资料都在数据库中。

看了一下这方面的函数:similar_text,但没有得出结果。

求高人指点。
...全文
733 18 打赏 收藏 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
八哥 2006-06-24
  • 打赏
  • 举报
回复
汉语分词=人工智能
wuyg719 2006-06-24
  • 打赏
  • 举报
回复
to 楼主:

你还有频率和更新时间等武器,用户经常范的错误,优先级不断提高,很少范的错误,
优先级不断降低,当降低到一定级别,则删除这个纪录。
xuzuning 2006-06-23
  • 打赏
  • 举报
回复
这是可以的!
不过这好象与你的初衷有违吧?
既然是 “自动给你列出个相似的句子”那么就不应该是退出循环,而是保存起来
当循环结束后依次开列出来供用户选择
jxyuhua 2006-06-23
  • 打赏
  • 举报
回复
if (intval($similarity) > 90){
//如果相似度超过90%,则认为它是相似的关键字,退出循环。
$similarKeywords = $row['keywords'];
continue;
}

应该是
if (intval($similarity) > 90){
//如果相似度超过90%,则认为它是相似的关键字,退出循环。
$similarKeywords = $row['keywords'];
break;
}
jxyuhua 2006-06-23
  • 打赏
  • 举报
回复
现在我是这样来处理的:
将用户的搜索记录关键字以及搜索到的结果数到数据库中。
当用户下次搜索没有返回结果时,则去寻找以前的搜索记录,从中找出相似的关键字来。

例如:
<?php
...
$sql = "SELECT keywords FROM searchlog WHERE ...";
...
while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
similar_text($sourceStr, $descStr, $similarity);
if (intval($similarity) > 90){
//如果相似度超过90%,则认为它是相似的关键字,退出循环。
$similarKeywords = $row['keywords'];
continue;
}
}
...
if (! empty($similarKeywords)) {
echo 'Did you mean:' . $similarKeywords;
}
...
?>

不知道大家认为这样怎样?如果保存的记录太多,会不会很影响效率?
liminlovemama 2006-06-22
  • 打赏
  • 举报
回复
I feel dizzy!!
testoktest 2006-06-21
  • 打赏
  • 举报
回复
mark
xuzuning 2006-06-21
  • 打赏
  • 举报
回复
反了!
不是“如何才能根据你输入的关键字,求出与它相似的另一个字符串呢?”
而是“如何才能求出与你输入的关键字相似的已知关键字呢?”

当问题变成后者的时候,你就可以用similar_text函数了
int similar_text ( string first, string second [, float &percent] )
返回first在second存在的字符个数,percent为表示相似度的值
echo similar_text ('程序', '程式', $percent);//2
echo $percent;//50

对于中文,可能用汉语拼音要更好些
it_zl 2006-06-21
  • 打赏
  • 举报
回复
词库词库呀..需要词库来支持.
ryl 2006-06-21
  • 打赏
  • 举报
回复
up
BlueDestiny 2006-06-21
  • 打赏
  • 举报
回复
建词表,根据匹配相关度来提示。
an9ryfr09 2006-06-21
  • 打赏
  • 举报
回复
应该是像唠叨老大说的那样,而不是事先去建立一个词库与你所搜索的内容来匹配。
英文还好办一些,中文的匹配可能会相当复杂。百度在中文匹配上还是有点研究的。
asd119cn 2006-06-21
  • 打赏
  • 举报
回复
中文的分词技术,好像也是中文搜索的难点吧。看过一些介绍东西。好像只有一些研究的,真正拿出来应用的并不是很多了。
lantersen 2006-06-21
  • 打赏
  • 举报
回复
UP
ImN1 2006-06-20
  • 打赏
  • 举报
回复
我得想法是这样的:

首先有一个该语言的词库系统
然后针对该语言的特点(特别是与输入法相关的特点)进行词之间的匹配
匹配技术是关键,这个对各民族语言都有所区别
例如中文需要对“拼音”“象形”匹配
英文需要对近似拼写匹配

当然,因为google硬件很强大,完全可以用手工制作匹配表的方法而免去匹配技术的研究
金山词霸(iciba.com)也有类似功能,它具体怎么做不太清楚
yunfeifan 2006-06-20
  • 打赏
  • 举报
回复
楼上的这样不行把,google 应该有自己的词库,例如

输入saarch

会提示你是不是再找 search

只要输入的词在词库有,那就提出来就可以了
  • 打赏
  • 举报
回复
当然首先是建立一个供检索的关键词与网页标题库。
当你输入一个关键词时,把该关键词拿去库里作模糊查询,like *你的关键词* ,这样子
然后判断该查询返回的结果条数,如果少于一个标准值,则说明对该关键词进行拆词(至于拆词,是另外一个专门的问题了),再把拆词后的部分拿去查询。比如“中国人民”,假设它真的查不到或结果很秒,则拆成“中国”、“人民”两部分,先“中国”AND “人民”,再少的话,再查“中国”OR “人民”…………
zeroleonhart 2006-06-20
  • 打赏
  • 举报
回复
you should create a database to record searched keywords.

21,889

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧