让我们说互联网用户搜索“使用gmail麻烦”。
如何使用“问题|问题|问题|问题|麻烦|使用gmail | googlemail | google mail”来回复条目?
我不想在不同关键字之间手动添加这些链接,因此“问题<>问题<>麻烦”和“gmail<>之间的链接googlemail<> google mail“完全未知。它们应该在自动化过程中找到。
解决问题的方法
我提供了同义词/同义词平台,如thesaurus.com,synonym.com等,或使用synomys数据库/ api,并在第三个网站上使用此用户生成的输入进行查询。
但这不会涵盖所有同义词,例如“gmail” - 示例。
我还有哪些其他选择?也许基于给定数据和过去记录的搜索短语的东西?
答案 0 :(得分:1)
评论时间有点长。
您正在寻找的内容在文本搜索领域被称为“同义词库”或“同义词”列表。显然,MySQL中有这样的功能提议。它尚未实施。 (Here是Stack Overflow上的一个相关问题,尽管问题中的链接似乎不起作用。)
解决方法是在将查询发送到数据库之前修改查询。也就是说,将查询解析为单词,然后查找这些单词的所有同义词,并重新构建查询。对于自然语言搜索而言,这比布尔搜索(需要更仔细的重建)更好。
用于获取带有同义词的最终单词列表的伪代码类似于:
select @finalwords = concat_ws(' ', group_concat(synonyms separator ' ') )
from synonyms s
where find_in_set(s.baseword, @words) > 0;
答案 1 :(得分:1)
在我看来,你手上有两个问题:
Lemmatisation,将单词分解为引理,有时称为词条或根词。这比Stemming更难,因为它不只是从单词中删除后缀,而是试图找到真正的根,例如“是”=> “是”。这通常是以编程方式完成的,尽管它似乎是一项复杂的任务。以下是文本被词形化的在线示例:http://lemmatise.ijs.si/Services
搜索同义词。这是一个非常复杂的问题。我听说过的一种方法是修改lemmatisation引擎,为给定的一组单词返回多个引理,即“problem”=> “问题”和“问题”,从而允许更灵活的结果集。然而,这意味着同义词必须从其他地方提供给lemmatisation引擎。我真的不知道如何以编程方式构建同义词列表。
因此,你可以考虑一种策略,让你对要搜索的文本进行语法排列,然后将每个引理传递给你的同义词查找器(无论如何有效),以获得最终的引理列表以执行搜索。
我认为你已经为自己制造了一个非常大的问题。
答案 2 :(得分:1)
你必须想到它忽略了语言。
当你用两个单词向宝宝展示同样的东西时,他明白这些单词是同义词。他可能没有完全理解,但他会在重复这一过程时学习。
您输入“gmail问题”。
两种选择:
系统会在搜索“google mail bug”之前识别此项目已被点击。这是一场比赛,我们称之为“相对搜索”。
我们会在历史记录中搜索匹配的搜索内容: 我们建议:“你的意思是雅虎邮件的麻烦吗?是/否”。你点击否,这是一个“不匹配”。我们可能会提出其他建议,例如已知的“相对搜索”列表或可能与我们的历史和levenshtein距离中的全文搜索相关的列表。
当一个词被充分评分为“同义词”时,你可以认为它是。算法可能是错误的,但事实上它取决于你真正期望的。
如果我搜索“使用谷歌发送邮件很困难”和“gmail问题”,则没有什么是同义词,但搜索相对相同。这对我来说比真正的同义词更重要。
如果你真的想要获得同义词,我会在第二阶段比较“相对搜索”中的单词,并包括手动检查。
我认为google算法主要使用同义词来突出显示网页结果中的搜索字词,但不会在他们使用相对搜索字词的情况下进行实际搜索,除非在已知情况下,因为“gmail”和“google mail”的结果不一样。
但如果您确定10个相对搜索的“gmail”都包含“google mail”,那么这将是猜测它们是同义词的良好开端。
答案 3 :(得分:0)
如果相关系统是可公开访问的网站,那么“在那里”选项是确保Google可以抓取所有内容,然后在您自己的网站上使用Google搜索,这应该为您提供同义词功能自由'。结果显然会有一些变幻莫测,但在获取新创建内容的匹配结果方面会有所滞后,具体取决于抓取工具到达网站的频率。可能不适合您的使用案例,但对某些人来说,这可能就足够了。
答案 4 :(得分:0)
看到您修改过的问题,使用公共API怎么样?
http://www.programmableweb.com/category/reference/apis?category=20066&keyword=synonym