问题标签 [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.
.net - 识别 2 个 HTML 页面是否相似
我正在尝试确定基本案例和提供的案例之间的差异。寻找一个图书馆来告诉我百分比或类似的相似性。
例如:
我有 10 个不同的 HTML 页面。* 都是 404 响应,只有一个 2 行随机代码(例如时间或当天的报价)。
现在,当我提供一个新的 404 页面时,我希望返回类似“%80”的结果,但是如果我提供另一个完全不同或相同网站但内容完全不同的页面,我应该得到一些“%20 相似”的结果。
基本上我想要做的是,当我得到一个新的回复时,我想确定新的回复是否与我之前提供的这 10 页相似。
我正在尝试在 .NET 中解决这个问题,库或算法推荐会很棒。
string - 查找具有相似文本的文章的算法
我在数据库中有很多文章(带有标题、文本),我正在寻找一种算法来找到 X 最相似的文章,比如当你提出问题时 Stack Overflow 的“相关问题”。
我尝试对此进行谷歌搜索,但仅找到有关其他“相似文本”问题的页面,例如将每篇文章与所有其他文章进行比较并将相似性存储在某处。SO 在我刚刚输入的文本上“实时”执行此操作。
如何?
algorithm - 词比较算法
我正在为我正在处理的项目做一个 CSV 导入工具。客户端需要能够在 excel 中输入数据,将它们导出为 CSV 并将它们上传到数据库。例如,我有这个 CSV 记录:
当然,这些公司保存在一个单独的表中并通过外键链接,所以我需要在插入之前找到正确的公司 ID。我计划通过将数据库中的公司名称与 CSV 中的公司名称进行比较来做到这一点。如果字符串完全相同,则比较应该返回 0,并返回一些随着字符串变得不同而变大的值,但 strcmp 不会在这里剪掉它,因为:
“Acme Company”和“Acme Comapny”应该有非常小的差异指数,但“Acme Company”和“Cmea Mpnyaco”应该有很大的差异指数或者“Acme Company”和“Acme Comp”。即使字符数不同,也应该有一个小的差异索引。此外,“Acme Company”和“Company Acme”应返回 0。
因此,如果客户在输入数据时输入了一个类型,我可以提示他选择他最可能想要插入的名称。
有没有一种已知的算法可以做到这一点,或者我们可以发明一个:)?
perl - 如何确定几个字符串中最长的相似部分?
根据标题,我正在尝试找到一种方法来以编程方式确定几个字符串之间的最长相似性部分。
例子:
file:///home/gms8994/Music/t.A.T.u./
file:///home/gms8994/Music/nina%20sky/
file:///home/gms8994/Music/A%20Perfect%20Circle/
理想情况下,我会回来file:///home/gms8994/Music/
,因为这是所有 3 个字符串共有的最长部分。
具体来说,我正在寻找 Perl 解决方案,但任何语言(甚至伪语言)的解决方案就足够了。
来自评论:是的,只是在开始;但有可能在列表中有一些其他条目,对于这个问题将被忽略。
text - 文字不规范
有人知道那里有一个库或软件可以找到文本中的不规则之处吗?例如,假设我有...
该软件或库将首先剪切它会发现相似的文本部分(很像一个压缩软件会编码重复的相似文本部分以将其压缩)但是使用容错变量它可以找到相似的文本部分,现在很像文本比较应用程序或差异/合并工具,它实际上可以突出显示它看到的不同之处。我正在考虑制作这个工具,但我不想重新发明轮子。如果有任何远程能够做到这一点的东西,我真的很想知道可能会帮助这个项目,或者至少知道不做一个。更不用说这个答案可能会帮助其他人寻找同样的东西,我认为需求对供应来说已经足够高了,这就是为什么让我难以置信我能做到的原因
comparison - 计算二进制数据相似度
我在这里看到了一些与确定文件相似性有关的问题,但它们都与特定域(图像、声音、文本等)相关联。作为解决方案提供的技术需要了解被比较文件的基础文件格式。我正在寻找的是一种没有此要求的方法,可以比较任意二进制文件而无需了解它们包含什么类型的数据。也就是说,我正在寻找确定两个文件的二进制数据的相似性百分比。
为了提供更多细节供您使用,尽管这可能适用于许多事情,但我确实有一个正在处理的特定问题。我目前也有一个可行的解决方案,但我认为它并不理想。在比较方法和存储结果方面可能有很多优化。希望这里的一些人能够给我一些新的想法。几天后我可能会编辑一些关于我当前方法的信息,但我不想通过告诉你我已经在做什么来偏见人们对这个问题的看法。
我正在处理的问题是视频游戏 ROM 映像的克隆检测。对于那些没有仿真经验的人来说,ROM 是游戏卡带上数据的转储。ROM“克隆”通常是同一游戏的修改版本,最常见的类型是翻译版本。例如,NES原版《最终幻想》的日文版和英文版都是克隆版。游戏共享几乎所有的资产(精灵、音乐等),但文本已被翻译。
目前有几个小组致力于维护各种系统的克隆列表,但据我所知,这一切都是手动完成的。我正在尝试做的是找到一种方法来自动和客观地检测相似的 ROM 映像,基于数据相似性而不是“这些看起来像同一个游戏”。检测克隆有几个原因,但主要动机之一是与Solid 压缩一起使用。这允许将所有游戏克隆一起压缩到同一个存档中,整个压缩克隆集通常只占用比单个 ROM 稍多的空间。
在提出潜在方法时需要考虑的一些问题:
- ROM 的大小差异很大,具体取决于系统。有些很小,但现代系统可能有较大的系统,256MB 或更多。一些(全部?)系统只有 2 作为可能大小的幂,其中一个系统上的 130MB 游戏将有 256MB ROM,大部分是空的。请注意,因此,如果游戏版本超过阈值并且必须使用两倍大小的卡带,某些克隆的大小可能会有很大差异。
- 目前,许多系统上有数千个已知的 ROM,大多数系统仍在不断发布新的 ROM。即使对于旧系统,也有一个主要的 ROM 黑客社区经常生产修改后的 ROM。
- 为每对可能的 ROM 存储相似性数据将为任何更流行的系统产生数百万行数据。一个有 5000 个 ROM 的系统需要 2500 万行相似性数据,而一个新游戏又增加了 5000 行。
- 处理的状态必须是可恢复的,这样如果它被中断,它可以从中断的地方继续。使用任何方法都需要进行大量处理,并且假设整个事情将在一批中运行是不安全的。
- 可以随时添加新的 ROM,因此该方法不应假定它已经具有“完整”集。也就是说,即使您已经确定了所有现有 ROM 的相似性,如果添加了一个新 ROM(这也可能在之前的处理完全完成之前发生),必须有一种方法将其与所有之前的 ROM 进行比较,以确定哪个(如果有的话)是它的克隆。
- 更高的处理速度应该优先于准确性(到一个点)。知道两个 ROM 是 94% 还是 96% 相似并不是特别重要,但如果需要一天的时间来比较一个新的 ROM 和以前的所有 ROM,那么程序可能永远不会真正完成。
这是一个有趣的问题,我期待看到其他人能想出什么。如果您需要更多详细信息,请在评论中告诉我,我会尽力提供。
string-matching - 一种更好的变长字符串相似度排序算法
我正在寻找一种字符串相似性算法,它在可变长度字符串上产生比通常建议的更好的结果(levenshtein distance、soundex 等)。
例如,
给定字符串 A:“Robert”,
然后是字符串 B:“Amy Robertson”
会比
字符串 C:“理查德”
此外,最好该算法应该与语言无关(也适用于英语以外的语言)。
pattern-matching - 确定两个或多个摘要是否相似
问题如下:
我有一个摘要,通常在 20 到 50 个单词之间,我想将其与其他相对相似的摘要进行比较。摘要所指的一般类别和地理位置是已知的。
例如,如果来自同一地区的人们正在撰写关于建造房屋的文章,我希望能够列出这些摘要,并且在一定程度上确定他们实际上指的是建造房屋而不是建造车库或后院游泳池。
该数据集目前大约有 50 000 个文档,每天大约有 200 个文档的增长速度。
首选语言是 Python、PHP、C/C++、Haskell 或 Erlang,无论哪种语言都能完成工作。另外,如果您不介意,我想了解选择特定语言的原因。
language-agnostic - 有没有什么解决方案可以知道两个没有详细内容比较的pdf的相似性
我想知道两个 pdf 文件的相似性,但我不想做详细内容比较。仅从其外部结构是否有任何解决方案。有可能吗?谢谢!
similarity - 新闻条目(主题)相似度算法
我想确定两个新闻项目内容的相似性,类似于谷歌新闻,但在某种意义上不同,我希望能够确定基本主题是什么,然后确定哪些主题是相关的。
因此,如果一篇文章是关于萨达姆侯赛因的,那么该算法可能会推荐一些关于唐纳德拉姆斯菲尔德在伊拉克的商业交易的内容。
如果你能抛出 k-最近邻之类的关键词,并稍微解释一下它们为什么起作用(如果可以的话),我会做剩下的研究并调整算法。只是寻找一个开始的地方,因为我知道那里有人以前一定尝试过类似的东西。