【问题标题】:finding similar strings to given by keywords, each keyword have got it's own 'power'找到与关键字给出的相似字符串,每个关键字都有自己的“力量”
【发布时间】:2023-04-07 05:31:02
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: php mysql soundex similarity


    【解决方案1】:

    除了权重表,为什么没有将标签与句子相关联的表呢?所以有一个名为sentence_tags 的表,其中有一个sentence_id 和一个tag_id 列。然后,您可以通过对这两个表进行连接来计算权重,并仍然引用包含标签的句子。您也可以在标签表中同时存储标签和 soundex。

    【讨论】:

    • 一旦你正确设计了你的数据库,你就可以回到类似的句子中。查看this answer to a similar question。在您的情况下,只需将 articles 替换为 sentences 并根据您的需要进行修改。
    【解决方案2】:

    也许Levenshtein Distance 是您正在寻找的。它计算从一个单词转移到另一个单词所需的步数。

    请意识到这是一项昂贵的操作。

    【讨论】:

    • 我知道 levenshtein 算法,但我不知道在这种情况下如何使用它。
    • 我的错,我是反过来读的。我认为你应该按单词分解。不要试图一次完成整个句子
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 2021-11-05
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多