问题标签 [similarity]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1875 浏览

sql - 如何根据兴趣找到相似用户

我正在尝试创建一个系统,该系统能够找到具有类似喜爱的电影/书籍/兴趣/等的用户,就像 last.fm 上的邻居一样。共享最多共同兴趣的用户将具有最高匹配,并将显示在用户配置文件中(5 个最佳匹配左右)。

没有相当快速的方法来做到这一点?显而易见的解决方案是创建一个包含用户 ID 和兴趣 ID 的表,并将一个用户与所有其他用户进行比较,但这将永远在一个表上花费......比如说百万用户,每个用户有 20 个兴趣。

我认为存在一些有效的解决方案,因为 last.fm 运行良好。我更喜欢使用一些常见的 SQL 数据库,如 mySQL 或 pgSQL,但任何事情都可以。

感谢您的建议。


更新:
事实证明,最大的问题是在 SQL 数据库中找到最近的邻居,因为没有一个开源数据库支持这种搜索。
所以我的解决方案是修改 ANN 以作为服务运行并从 PHP 查询它(例如使用套接字) - 甚至数百万用户在内存中说 7 维并不是什么大问题,它运行速度快得令人难以置信。

较小数据集的另一个解决方案是这个简单的查询:

20-50 毫秒,10 万用户,每个用户平均有大约 20 个兴趣(10 000 个可能的兴趣)

0 投票
2 回答
4008 浏览

hash - 用于索引相似文本的哈希函数

我正在搜索一种哈希函数来索引相似的文本。因此,例如,如果我们有两个非常长的文本,分别称为“A”和“B”,其中 A 和 B 差别不大,那么应用于 A 和 B 的哈希函数(称为 H)应该返回相同的数字。

所以 H(A) = H(B) 其中 A 和 B 是相似的文本。

我尝试了“DoubleMetaphone”(我使用意大利语文本),但我发现它非常依赖于字符串前缀。例如:

A = “这是我要散列的非常长的文本” B = “这是非常”

==> doubleMetaPhone(A) = doubleMetaPhone(B)

这对我来说不是很好,因为具有相同前缀的字符串可以被比较为相似,我不想要这个。

谁能建议我任何其他方式?

0 投票
1 回答
1070 浏览

machine-learning - 将文档添加到评分的 TF-IDF 集合中?

我有大量已经计算过 TF-IDF 的文档。我正准备向集合中添加更多文档,我想知道是否有一种方法可以在不重新处理整个数据库的情况下将 TF-IDF 分数添加到新文档中?

0 投票
2 回答
2871 浏览

matlab - Matlab中时间序列之间的相似性搜索。可能的 ?我在 matlab 中找不到 R-tree 实现

我想在matlab中实现相似度搜索。我想知道这可能吗?

我的计划是使用 2 种流行的相似度度量,即欧几里德距离和动态时间规整。这两个都将应用于时间序列数据集。我现在的问题是如何评估这两种测量性能和准确性?我看到一些文献说我应该使用 K-NN 算法。

然后,我计划在时间序列数据集上应用降维。降低数据集的维数后。我需要使用 R-tree 或任何可用的索引技术来索引数据集。

但是我的问题是,要做到这一点,我需要 R-tree matlab 代码,我在互联网上几乎找不到任何代码......

我确实意识到大多数相似性搜索的实现都是用 C++、C 和 Java 实现的……但我不熟悉这些。我希望我可以在 Matlab 中实现这些......任何大师都可以帮助我吗?

另外,我可以进行什么样的评估来评估每种算法的性能。

谢谢

0 投票
3 回答
82452 浏览

mysql - 如何找到相似的结果并按相似度排序?

如何查询按相似度排序的记录?

例如。搜索“库存溢出”将返回

  1. 堆栈溢出
  2. SharePoint 溢出
  3. 数学溢出
  4. 政治溢出
  5. 视觉特效溢出

例如。搜索“LO”将返回:

  1. 巴勃罗毕加索
  2. 米开朗琪罗
  3. 杰克逊波洛克

我需要帮助:

  1. 使用搜索引擎来索引和搜索 MySQL 表,以获得更好的结果

    • 使用Sphinx搜索引擎和 PHP

    • 在 PHP中使用Lucene引擎

  2. 使用全文索引来查找相似/包含的字符串


什么不好用

  • Levenshtein 距离非常不稳定。(UDF查询
    搜索“狗”给了我:
    1. 沼泽
    2. 大的
    3. 回声
  • LIKE返回更好的结果,但对于长查询不返回任何内容,尽管确实存在类似的字符串
    1. 狗仔队
    2. 多加拉尔
    3. 教条
0 投票
1 回答
1231 浏览

hadoop - 从 pig 中的分组数据生成二元组合

给定我的 userid,itemid 格式的输入数据:

我想生成每个组中项目的所有组合(顺序不重要)。我最终打算对我组中的项目执行 Jaccard 相似性。

理想情况下,我的二元组将被生成,然后我将输出展平为:

代表用户 ID 的字母 ABC 并不是输出所必需的,我只是为了说明目的而展示它们。从那里,我会计算每个二元组的出现次数以计算杰卡德。我很想知道是否有其他人正在使用 pig 进行类似的相似性计算(对不起!)并且已经遇到过这种情况。

我查看了猪教程随附的 NGramGenerator,但它与我想要完成的内容并不匹配。我想知道也许 python 流 UDF 是要走的路。

0 投票
4 回答
4190 浏览

django - 有没有办法根据字符串相似性(a la python difflib)过滤 django 查询集?

我需要将冷线索与我们客户的数据库进行匹配。

潜在客户大量来自第三方提供商(数千条记录),销售要求我们(用他们的话说)“过滤掉我们的客户”,这样他们就不会试图将我们的服务出售给老客户。

显然,线索中有拼写错误。Charles 变成了 Charlie,Joseph 变成了 Joe,等等。所以我不能只做一个过滤器,比较lead_first_name 和 client_first_name 等等。

我需要使用某种字符串相似性机制。

现在我正在使用可爱的difflib将潜在客户的名字和姓氏与使用Client.objects.all(). 它可以工作,但是由于客户端的数量,它往往很慢。

我知道大多数 sql 数据库都有 soundex 和差异函数。在下面的更新中查看我对它的测试 - 它的效果不如 difflib。

还有其他解决方案吗?有更好的解决方案吗?

编辑:

Soundex,至少在我的数据库中,表现不如 difflib。

这是一个简单的测试 - 在包含“Joseph Lopes”的表中查找“Joe Lopes”:

以上返回“Joe Satriani”作为唯一匹配。即使将相似度阈值降低到 2 也不会将“Joseph Lopes”作为潜在匹配返回。

但是 difflib 做得更好:

在 gruszczy 的回复后编辑:

在自己编写之前,我在所有知识的存储库中寻找并找到了 Levenshtein Distance 的 T-SQL 实现。

在测试它时,它仍然不会比 difflib 做更好的匹配工作。

这使我研究了 difflib 背后的算法。它似乎是Ratcliff -Obershelp算法的修改版本。

不幸的是,我似乎找不到其他善良的灵魂已经创建了基于 difflib 的 T-SQL 实现......我会尽可能地尝试一下。

如果在接下来的几天内没有其他人提出更好的答案,我会将其授予 gruszczy。谢谢,好心的先生。

0 投票
2 回答
6258 浏览

unicode - 在 Unicode 中查找相似的 ASCII 字符

有人知道在 Unicode 中查找与 ASCII 字符相似的字符的简单方法吗?一个例子是“西里尔小写字母DZE (ѕ)”。我想搜索并替换相似的字符。类似的意思是人类可读的。你看不出来有什么区别。

0 投票
1 回答
260 浏览

similarity - 当这两个文档相似时,查找一个文档是否包含在另一个文档中的算法

我正在寻找一种算法来确定两个文本文档是否相似,其中一个文档包含在另一个文档中。

我提前谢谢你。

0 投票
2 回答
1770 浏览

string - 散列函数,对同一桶中的相似字符串进行散列

我正在寻找一个“坏”的哈希函数:我想对字符串进行哈希处理并将相似的字符串放在一个桶中。

你能告诉我从哪里开始我的研究吗?一些方法或算法名称...