【问题标题】:Is there a way to compare the similarity between sentences in sql?有没有办法比较sql中句子之间的相似度?
【发布时间】:2021-11-06 01:17:09
【问题描述】:

有没有办法比较sql中句子之间的相似度?我有很大的数据集,我需要识别两个或多个句子中有相似词的实例。

如何告诉 SQL 只返回以下值?

根据我的谷歌搜索,可能有一种方法可以使用全文搜索和语义搜索来做到这一点,但我已经能够找到一篇文章来解决我想要实现的目标。

小组中的某个人可以为我提供示例或指出可以帮助我的文章吗?更好的是,我正在尝试做的事情甚至可以在 SQL 中实现。

【问题讨论】:

  • 即使是人类,我也无法理解“今天是个好日子”和“穿红色T恤的人”之间的关系。或者我看太多星际迷航
  • 有很多关于匹配模糊文本的研究。我会从研究“莱文斯坦距离”开始,但还有更多。见en.wikipedia.org/wiki/Levenshtein_distance。顺便说一句,它已经在 Apache Commons 中用 Java 实现了。
  • Like 子句? SELECT * FROM Customers WHERE Sentence LIKE 'today%' 或 Sentence LIKE 'the%'
  • @Ash Nope,那是在一个退化的边缘情况下跳跃,会让你在面试中笑出声来。您实际上只是在句子中查找带有特定单词的所有句子-甚至不假设句子本身相似。
  • 我只是提出一个非常简单的建议,试图让事情向前发展一点。确实,您应该使用 Python 或类似的东西来完成类似的事情。 SQL Server 不是此类工作的正确工具。

标签: sql sql-server full-text-indexing


【解决方案1】:

不,没有。

部分问题在于“相似性”是一个复杂的设置,这需要一个程序用几个月的编程时间来分析可能的句子。你给出了非常简单的例子 - 恭喜。即使这样也没有你想的那么容易。 “小男孩穿红色 T 恤”怎么样?小男孩会不会有所不同?

这需要大量工作、大量定义,或者可能需要对多层神经网络进行大量训练。

SQL 通常在字符串操作方面很糟糕——你得到的最好的是 SOUNDEX,它只比较第一个单词的 4 个字母(RTFM,它的工作原理实际上很有趣,但它绝对不适合比较句子之类的事情.

所以,不,这完全超出了 SQL 的范围,您必须下载数据并使用 SQL 外的方法(这也更适合此类工作)。

您显然可以使用 @ASH 建议的简单 SQL 来解决这个问题 - 但这不是在寻找“相似的句子”,而是围绕特定于您的数据集的特定标记。这是过度拟合并绕过回答您提出的问题。

【讨论】:

    【解决方案2】:

    你可以试试 SOUNDEX 功能。谷歌 SOUNDEX,然后了解这是否适用于您的情况。查询是:

    SELECT *
    FROM your_table
    WHERE SOUNDEX(Sentence) = SOUNDEX(Sentence);
    

    【讨论】:

    • 这是尽可能多的不合逻辑的任务。我强烈建议您阅读 SOUNDEX 上的文档,然后您会意识到它甚至不看句子。它实际上只比较 4 个字母。
    猜你喜欢
    • 2021-03-19
    • 1970-01-01
    • 2021-03-30
    • 2023-03-15
    • 2011-01-03
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2019-09-06
    相关资源
    最近更新 更多