返回文本之间的亲和力的函数?

2024-03-16

考虑我有一个

string1 = "hello hi goodmorning evening [...]"

我有一些小关键字

compare1 = "hello evening"
compare2 = "hello hi"

我需要一个返回文本和关键字之间的关联性的函数。例子:

function(string1,compare1);  // returns: 4
function(string1,compare2);  // returns: 5 (more relevant)

请注意5和4只是示例。

你可以说 - 编写一个计算出现次数的函数 - 但对于这个例子来说,这是行不通的,因为两者都出现了 2 次,但compare1 不太相关,因为在 string1 中没有准确找到“hello night”(hello 和 night 这两个词是比你好更遥远)

有没有已知的算法可以做到这一点?

ADD1:

在这种情况下,像“编辑距离”这样的算法将不起作用。 因为 string1 是一个完整的文本(如 300-400 个单词),并且比较字符串最多为 4-5 个单词。


动态规划算法

看来您正在寻找的内容与史密斯-沃特曼算法 http://en.wikipedia.org/wiki/Smith%E2%80%93Waterman_algorithm does.

来自维基百科:

该算法最初由 Temple F. Smith 和 Michael S. Waterman 于 1981 年提出。尼德曼-温施 http://en.wikipedia.org/wiki/Needleman-Wunsch_algorithmSmith-Waterman 算法,它是它的一个变体动态规划算法 http://en.wikipedia.org/wiki/Dynamic_programming。因此,它具有理想的特性,即保证找到相对于所使用的评分系统(包括替换矩阵和间隙评分方案)的最佳局部对齐。

让我们看一个实际的例子,这样你就可以评估它的实用性。

假设我们有一个文本:

text = "We the people of the United States, in order to form a more 
perfect union, establish justice, insure domestic tranquility, 
provide for the common defense, 

  promote the general welfare, 

  and secure the blessings of liberty to ourselves and our posterity, 
do ordain and establish this Constitution for the United States of 
America.";  

我将我们要匹配的部分隔离出来,只是为了方便您阅读。

我们将比较相似度(或相似度)与字符串列表:

list = {
   "the general welfare",
   "my personal welfare",
   "general utopian welfare",
   "the general",
   "promote welfare",
   "stackoverflow rulez"
   };  

我已经实现了算法,因此我将计算相似度并对结果进行标准化:

sw = SmithWatermanSimilarity[ text, #] & /@ list;
swN = (sw - Min[sw])/(Max[sw] - Min[sw])  

然后我们绘制结果:

我认为这与您的预期结果非常相似。

HTH!

一些实现(带源代码)

  • 史密斯-沃特曼 CUDA 源代码 (GSW) http://www2.engr.arizona.edu/~rcl/gsw.html
  • S-M算法解释 (推介会) http://www.maths.tcd.ie/~lily/pres2/sld012.htm
  • 交互式分步演示 小程序 http://baba.sourceforge.net/
  • Java源代码 http://jaligner.sourceforge.net/
  • Python源代码 http://narnia.cs.ttu.edu/drupal/node/104
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回文本之间的亲和力的函数? 的相关文章

  • 时间复杂度和运行时间有什么区别?

    时间复杂度和运行时间有什么区别 它们是一样的吗 运行时间是指程序运行所需的时间 时间复杂度是对输入大小趋于无穷大时运行时间渐进行为的描述 您可以说运行时间 是 O n 2 或其他什么 因为这是描述复杂性类和大 O 表示法的惯用方式 事实上
  • 包围一组点的多边形

    我有一组 S 点 2D 由 x 和 y 定义 我想找到 P 包围该组所有点的最小 含义 具有最少数量的点 多边形 P 是S 有没有已知的算法来计算这个 我在这个领域缺乏文化令人惊讶 感谢您的帮助 对于这个问题有很多算法 它被称为 最小边界框
  • 使用并集查找(又名不相交集)检测图是否是二分图

    我正在 Spoj 上做一个问题 基本上可以简化为检测图是否是二分图 我正在尝试使用 dfs 为图表着色 但它太慢了 有人评论这个 没有 bfs 没有 dfs 没有二部图 简单的并查集就可以做到 确实速度很快 提示 1 偶数长度的环不会影响两
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 如何有效地找到距给定点最远的点(从一组点中)?

    我正在寻找一种算法或数据结构来解决以下问题 给你一组点 S 然后你会得到另一个点形式的 Q 查询 对于每个查询 找到集合中距离给定点最远的点 集合中最多有 10 5 个点和 10 5 个查询 所有点的坐标都在 0 到 10 5 范围内 我想
  • 数学组合的完美最小哈希

    首先定义两个整数N and K where N gt K 两者都在编译时已知 例如 N 8 and K 3 接下来 定义一组整数 0 N or 1 N 如果这使答案更简单 并调用它S 例如 0 1 2 3 4 5 6 7 的子集数量S wi
  • SVG 文本无法在 Chrome 或 Safari 中呈现

    我有一些 SVG 文本在 Firefox 上运行良好 但在 Chrome 和 Safari 中却没有出现 我努力了 向 svg 容器添加填充 以防文本被隔断 从文本中删除 xml space preserve 添加内联填充颜色
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 绘制多边形

    我正在使用 Google Maps API V3 根据路径绘制多边形 该路径是随机未排序坐标点 LatLng 的数组 这会产生以下形状 Polylines intersect Problem 由于多边形的形状取决于路径中点的顺序 因此如何对
  • 迭代任意大小的子集

    我可以迭代大小为 1 的子集 for int a 0 a lt size a 或大小为 2 的子集 for int a1 0 a1 lt size a1 for int a2 a1 1 a2 lt size a2 or 3 for int
  • 具有 2 个属性的背包算法。如何在 3d 数组中实现它?

    当有超过 1 个属性时 我无法理解背包问题 当有 1 个属性时 我必须编写一个使用具有 2 个属性的背包算法的程序 老师告诉我们 它必须在 3d 数组中完成 错误的实现将导致 O 2 n 处理时间 我无法想象这样的数组会是什么样子 假设这是
  • 实施二分查找有哪些陷阱? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 二分查找比看起来更难实现 虽然二分搜索的基本思想相对简单 但细节可能出人意料地棘手 Donald Knuth 新的二分搜索实现中最有可
  • jquery-traversing:选择 -> 选项 -> 文本

    我想将变量与选择 gt 选项 gt 选择的文本进行比较 以更改 选定 属性 这是我的代码 它有效 但我认为这不是最好的编写方式 请原谅我的英语 我使用谷歌翻译寻求帮助嘿嘿嘿 var lista example 1 id option eac
  • 如何测试 UITextField 是否为零?

    我正在尝试制作我的应用程序的一部分 如果该人不更改我的 UITextField 中的空白文本 那么他 她将无法继续下一步 基本上 我想测试 UITextField 的 nil 文本 我已经使用了 if text 方法 但是如果用户单击 UI
  • 动态规划 (DP) 中的重叠子问题是什么?

    为了使动态规划适用 问题必须具有两个关键属性 最优子结构 and 重叠子问题 1 https en wikipedia org wiki Dynamic programming 对于这个问题 我们只关注后一个属性 有各种不同的定义重叠子问题
  • Prim 的迷宫生成算法:获取相邻单元格

    我基于 Prim 算法编写了一个迷宫生成器程序 该算法是 Prim 算法的随机版本 从充满墙壁的网格开始 选择一个单元格 将其标记为迷宫的一部分 将单元格的墙壁添加到墙壁列表中 While there are walls in the li
  • 告诉我 SQL Server 全文搜索器疯了,不是我疯了

    我有一些客户具有用户正在搜索的特定地址 123 通用方式 数据库中有 5 行匹配 ResidentialAddress1 123 GENERIC WAY 123 GENERIC WAY 123 GENERIC WAY 123 GENERIC
  • 归并排序中的递归:两次递归调用

    private void mergesort int low int high line 1 if low lt high line 2 int middle low high 2 line 3 mergesort low middle l
  • 我正在尝试寻找“调酒师算法”

    我正在解决旧编程竞赛中的一些示例问题 在这个问题中 我们输入了我们有多少调酒师以及他们知道哪种配方 每杯鸡尾酒的制作时间为 1 分钟 我们需要计算是否可以在 5 分钟内使用所有调酒师完成订单 解决这个问题的关键是尽可能高效地分配鸡尾酒 这就
  • 应用对数来导航树

    我曾经知道一种使用对数从树的一片叶子移动到树的下一个 有序 叶子的方法 我认为它涉及获取 当前 叶子的位置值 排名 并将其用作从根向下到新目标叶子的新遍历的种子 一直使用对数函数测试来确定是否沿着右或左节点向下到达叶子 我已经不记得如何运用

随机推荐

  • 什么是 __main__.py?

    是什么 main py文件 我应该在其中放入什么样的代码 什么时候应该有一个 通常 Python 程序是通过在命令行上命名 py 文件来运行的 python my program py 您还可以创建一个充满代码的目录或 zip 文件 并包含
  • Antlr 语法生成无效的 C# 代码

    我正在尝试使用 ANTLR 和 StringTemplate 库开发一个 C 代码生成器 AntlrWorks 可以生成 C 解析器和词法分析器文件 而不会报告任何错误 但是 c 解析器代码无效 无法在 Visual Studio 中编译
  • Celery 3.0.1 中的框架错误

    我最近从 2 3 0 升级到 Celery 3 0 1 所有任务都运行良好 很遗憾 我经常收到 帧错误 异常 我还运行主管来重新启动线程 但由于这些线程从未真正被杀死 主管无法知道 celery 需要重新启动 有没有人见过这个 2012 0
  • 在 AWS Code Pipeline 中使用 docker compose 时出错

    我正在使用 AWS Code Pipeline 部署我的 dockerized Django 应用程序 但遇到了一些 Docker 错误 error Service proxy failed to build toomanyrequests
  • 如果满足特定条件,则停止沿特定深度的 boost::depth_first_search

    我在用着BGL http boost org doc libs 1 45 0 libs graph doc table of contents html来存储我的 DAG 顶点有状态 考虑到其中一个顶点的状态发生变化 我想更新依赖顶点 我可
  • 用于格式化一系列单元格并根据 Google 电子表格中的日期插入特定文本的脚本

    我有一个规划器类型的 Google 电子表格 其中每天有 8 10 个用户添加数据 当我向单元格添加日期时 我希望对该日期之后同一行中的所有单元格进行格式化并添加类似 ENDED 的文本值 目前 我正在使用条件格式和 ArrayFormul
  • -[NSRangeException raise] 上的符号异常断点

    在 Xcode 中添加符号断点为您提供了一个示例模板 NSException raise 我想做同样的事情但是具体来说 on NSRangeException raise 原因是我想断点only关于特定数组边界异常 例如 Terminati
  • 如何使用 Traefik 进行 WebSocket 后端

    我正在尝试为 WebSocket 应用程序配置 Traefik 我只是尝试在 docker 上使用一个简单的 WS 应用程序 https hub docker com r jmalloc echo server https hub dock
  • 过滤空手道测试响应对象以获得子列表?

    鉴于此功能文件 Feature test Scenario filter response def response a a b a c a d ab e ab f ab g ac h ac i ac
  • 建模:Xml 与关系数据库

    我想知道是否有最佳实践来决定何时应使用 XML 对系统进行建模以及何时应使用关系数据库进行建模 我知道您可以将 XML 存储在数据库中 但是对系统进行建模之间存在巨大差异使用标准化数据库表并使用 XML 模式对系统进行建模 为了具体起见 假
  • 从 rpy2 传递到 R 的什么对象?

    我无法使以下代码工作 尽管我没有看到此错误在 R 中严格工作 from rpy2 robjects packages import importr from rpy2 import robjects import numpy as np f
  • R 中的 Markdown 表到数据框

    有多种方法可以将数据框转换为 Markdown 表 但是 给定 Markdown 表 如何转换回数据帧 给定一个表格 Table Header Second Header Table Cell Cell 2 Cell 3 Cell 4 或者
  • Python函数参数:元组/列表

    我的函数需要一个列表或元组作为参数 它并不真正关心它是什么 它所做的只是将其传递给另一个接受列表或元组的函数 def func arg arg is tuple or list another func x do other stuff h
  • 工厂女孩在我的开发数据库中保存记录

    我有一个非常奇怪的问题 我不知道应该去哪里找到它 我正在使用 rspec 和 Factory Girl 开发一个 Rails 3 应用程序进行测试 由于某种原因 每当我运行任何rails命令 例如 rake数据库 启动开发服务器等 时 都会
  • 如何避免 svgs 的foreignObjects 内的元素缩放?

    我想使用 svg 作为 div 元素的容器 该元素应包含多个元素 目前它看起来像这样
  • Objective-C 相当于 Java 包吗?

    Java 包的 Objective C 等价物是什么 你如何用 Objective C 来分组和组织你的课程 问题 1 Objective C 相当于 Java 包吗 Objective C 没有与 Java 包或 C 命名空间等效的东西
  • Git/GitKraken – 从备份恢复存储库后,文件模式更改为未知值 (14001)

    对 Git Kraken 还是个新手 如果逻辑板对我来说坏了 我必须从备份中恢复存储库 重新安装软件 然后在临时计算机上恢复并运行 直到我可以从商店取回原始计算机 现在我在 Gitkraken 中打开了存储库 这告诉我我的修补程序分支上有
  • 如何增加 docker build 的卷大小

    我的步骤之一Dockerfile需要10G以上的磁盘空间 确实如此 然而 所有的中间容器docker build使用 10G 卷创建 我做了什么 started dockerd with storage opt dm basesize 25
  • 如果发生异常,“Content-encoding”标头将从 HttpHandler 响应中消失

    我有一个自定义 HttpHandler 在其中手动启用输出压缩 如下所示 context Response AppendHeader Content encoding gzip context Response Filter new GZi
  • 返回文本之间的亲和力的函数?

    考虑我有一个 string1 hello hi goodmorning evening 我有一些小关键字 compare1 hello evening compare2 hello hi 我需要一个返回文本和关键字之间的关联性的函数 例子