0

这个问题对我来说是一个挑战,我的朋友不能告诉我怎么做,但他真的是一个很好的程序员(我认为)。

用户可以将句子放入数据库。当用户输入一个句子时,它会保存在sentences表格中。接下来,将句子拆分为单词,将单词的每个 soundex 保存到tags带有拆分句子的 id 的表中。

最后,将单词的每个soundax 放入weights表中,如果有多个相同的soundex,则函数counter对该soundex 加1。

(对于那些不知道的人:soundex 是一个返回字符串的语音表示(发音方式)的函数)

数据库结构:一张表sentences包含两行:idsentence。其他表tags包含id(with 是一个句子的 id) 和tag(with 是句子中的一个单词)。 tag不仅仅是简单的单词,而是这个单词的 soundex。最后一个表weights包含tagweight(用是数字,它告诉我们表中有多少这样的标签tags

我的问题是:我怎样才能让一个函数女巫返回给定字符串的相似句子。它应该使用标签(单词的声音),并且每个标签都应该基于weights表格有自己的权力。经常使用的标签比原始标签更重要。可以在一个mysql查询中完成吗?

下一个问题:我认为这种寻找相似句子的方式很好,但是这个功能的速度呢?我需要在我的网站中经常使用它。

4

3 回答 3

2

好吧,为什么没有权重表,而没有将标签与句子相关联的表呢?所以有一个sentence_tags用 asentence_id和一tag_id列调用的表。然后,您可以通过对这两个表进行连接来计算权重,并且仍然引用包含标签的句子。您还可以将标签和 soundex 都存储在标签表中,而您正在使用它。

于 2011-03-23T21:15:02.583 回答
0

Perhaps the Levenshtein Distance is what you are looking for. It calculates the number of steps there are needed to transfer from one word to another.

Do realize this is a costly operation.

于 2011-03-23T21:29:50.237 回答
0

Joe K 的建议似乎适合良好的数据库设计。

不要存储可以推断的信息。

意思是,使用 join 语句和 PHP 在运行时计算权重。

我知道这可能不是您设计中的正确解决方案,但通常花一些时间在智能数据库结构设计上会使一切工作得更好。

于 2011-03-24T00:13:00.580 回答