问题标签 [stringdist]

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 回答
333 浏览

r - 依次在一个变量中 agrep 名称,然后创建一个具有最短名称的新变量以进行紧密匹配

假设公司名称的字符向量以各种形式出现。这是一个10,000行数据框的小版本;它显示了所需的第二个向量(“two.names”)。

假设向量已按公司名称的字母顺序排序(我相信将最短的版本放在首位)。我如何使用agrep()从第一个公司名称开始,将其与第二个公司名称相匹配,然后 - 假设紧密匹配 - 将第一个公司名称添加到新列 (short.name) 中。然后,将其与第三个元素匹配,等等。所有 Carlson 变体都将匹配。

如果没有足够的匹配,比如当 R 遇到第一个 Carmody 时,从它开始并匹配到下一个元素,依此类推,直到下一个不匹配。

如果连续的公司之间没有匹配,R 应该继续直到找到匹配。

这个问题的答案是对整个向量和按年份分组的模糊匹配。 通过名称的模糊匹配(通过使用 R 的 agrep)创建唯一 ID 然而,似乎提供了可以解决我的问题的部分代码。本题使用stringdist(). 字符串列表

编辑:

下面,该对象matches是一个显示匹配项的列表,但我不知道告诉 R 的代码“获取第一个并将以下匹配项(如果有)转换为该名称并将该名称放入新变量列中。 "

0 投票
1 回答
2681 浏览

r - 在 R 的数据框中查找相似的行(不重复)

我有一个 >800k 行的数据集(示例):

字段ID是唯一的ID,字段codeA和codeB必须相同,但字段fieldA和fieldB需要Levenshtein距离或类似函数。我需要基于此找到哪些行非常相似。输出可能是以下内容:

如果我有 2 个约束,如 codeA 和 codeB,那么这么大的数据集的距离矩阵将不起作用并且没有多大意义。我猜一种方法是一个 plyr 函数,由 codeA-codeB 分割,但在那之后我被困住了

为了澄清起见,我想将在 fieldA 和 fieldB 中具有高度相似性并且在 codeA 和 codeB 中具有完全匹配的所有组合在一起。


编辑:

遵循 David DeWert 的想法,沿着这条线的东西似乎适用于每个 codeA-codeB 组,不是一个好的输出 put 似乎是朝着正确的方向迈出的一步:

现在我需要找到一种方法将数据帧拆分为 codeA-codeB 组并将此函数应用于它们。


编辑2:

我使用之前的函数集群和 plyr 包管理了一个“足够好”的方法。

这将创建一个列表,其中包含“按 codeA、codeB 分组”中的每一个,例如:

它有效地通过 fieldA 和 fieldB 聚集由 codeA 和 codeB 创建的组。这没有得到我想要的输出,但由于我无法获得更好的解决方案,所以必须这样做。我对此最大的抱怨是 plyr 函数的性质不允许我按组获得超过 1 行(这是完全有意义的),因此我必须使用列表而不是数据框,这不是一个真正的问题。当数据集非常大(像这样)并且 plyr 不能很好地与它们一起工作时,就会出现问题......并且替代 dplyr 包与列表结果不兼容......哦,好吧。

0 投票
1 回答
332 浏览

r - 有没有办法检查两个字符串是否大致相同?

考虑以下两个字符串: applesauce apple-sauce 。它们指的是同一个对象。因此,任何包含这两个名称的记录都将被视为重复。但是,在 R 中,这些被视为单独的级别。可以使用编辑距离来量化这两个名称使用 stringdist 包的相似程度吗?

0 投票
1 回答
1155 浏览

r - R中两个句子之间的单词级编辑距离

我正在寻找 R 中的快速解决方案来确定两个句子之间的单词级编辑距离。更具体地说,我想确定最少的单词添加、替换或删除次数,以将句子 A 转换为句子 B。例如,如果句子 A 是“非常漂亮的汽车”,而句子 B 是“漂亮的红色汽车”,则结果应该是 2(1 个删除和 1 个添加)。

我知道 R 中存在用于字符级编辑距离的现有解决方案(例如,本机adist()stringdist()来自包'stringdist'),但我没有找到单词级的解决方案。

0 投票
2 回答
418 浏览

r - 有利于子字符串且与词序无关的字符串距离度量?

对于我的数据分析问题,我通常需要规范名称,即名称 A 和 B,如果 A 和 B 共享大量公共子字符串,无论这些子字符串的顺序如何,我都会认为它们相同或非常相似。

例如,对于 "COLD" 和 c("FLOOD", "COLD/WIND CHILL"),我想选择 "COLD/WIND CHILL" 更类似于 "COLD" 而不是 "FLOOD"。

我目前的任务是在 R 中。所以我的具体问题如下:

  1. R中是否已经定义了这样的指标?

  2. 是否可以提供我自己的实现并以某种方式与 R 的 stringdist 包集成?

对于我的要求,我可以简单地使用正则表达式搜索,只要我能在 B 中找到 A 或在 A 中找到 B,我可以认为它们的距离为 0。

非常感谢!

编辑:

在以下情况下:

我希望从“COLD”到“COLD/WIND CHILL”的距离小于“COLD”到“FLOOD”。

在找到匹配的子字符串后,指标似乎必须忽略要删除的剩余部分。

编辑1:

我原来的问题已经解决了。以下是在 R中使用amatchof的相关问题的跟进:stringdist

在我看来,我无法重现与 . 相同的结果adist,甚至无法stringdist在与amatch.

下面是插图:

在上述上下文中,通过使用 的计算stringdistamatch应该返回2,而不是1

基于stringdist的文档,

“权重:
对于method='osa'或'dl',删除、插入、替换和转置的惩罚,依此顺序。当method='lv'时,转置的惩罚被忽略。”

我相应地选择了权重以消除对删除的惩罚,同时最大化对其他操作的惩罚。令人鼓舞的是stringdist,使用权重设置显示了预期的行为。

我假设这amatch将用于进行计算,但与 ! 的行为相矛盾的行为stringdist似乎很奇怪!amatchstringdist

我希望开始amatch工作,这样我就不必使用adistor重新实现它stringdist

再次感谢您的帮助。

0 投票
2 回答
99 浏览

r - 计算一个字符串所需的换位,以便可以在另一个字符串中找到它

这是我想做的事情:当我分析的术语是“苹果”时,我想知道“苹果”需要多少转置才能在字符串中找到。

“立即购买苹果” => 需要 0 次换位(有苹果)。

“网上便宜的苹果” => 需要 1 次换位(苹果到苹果)。

“在这里找到你的苹果” => 需要 2 个换位(苹果到苹果)。

"aple" => 需要 2 次换位(从苹果到苹果)。

"bananas" => 需要 5 次换位(苹果到香蕉)。

stringdist 和 adist 函数不起作用,因为它们告诉我需要多少转置才能将一个字符串转换为另一个字符串。无论如何,这是我到目前为止写的:

0 投票
0 回答
770 浏览

r - R中的模糊合并-寻求帮助以改进我的代码

受来自statarfuzzy_join包的实验函数的启发,我自己编写了一个函数,它结合了精确和模糊(按字符串距离)匹配。我要做的合并工作非常大(导致多个字符串距离矩阵少于十亿个单元格),我的印象是该函数的编写效率不是很高(关于内存使用)和并行化以一种奇怪的方式实现(字符串距离矩阵的计算,如果有多个模糊变量,而不是字符串距离本身的计算是并行化的)。至于fuzzy_joinfuzzy_join功能的想法是尽可能匹配精确变量(以保持矩阵更小),然后在这个精确匹配的组内进行模糊匹配。我实际上认为该功能是不言自明的。我在这里发布它是因为我想得到一些反馈来改进它,因为我想我不是唯一一个尝试在 R 中做类似事情的人(尽管我承认 Python、SQL 和类似的东西可能会在这种情况下效率更高。但是必须坚持自己感觉最舒服的事情,并且用相同的语言进行数据清理和准备在可重复性方面很好)

以下几点会很有趣:

  1. 我不太确定如何以data.table我上面使用的样式编码多个完全匹配的变量(我相信这是禁食选项)。
  2. 是否可以进行嵌套并行化?这意味着可以在计算字符串距离矩阵的基础上使用并行 foreach 循环。
  3. 我也对使整个事情更高效的想法感兴趣,即消耗更少的内存。
  4. 也许您可以建议一个更大的“真实世界”数据集,以便我可以创建一个示例。不幸的是,我什至无法与您分享我的数据的小样本。
  5. 将来,除了经典的左内连接之外,做其他事情也会很好。因此,非常感谢有关该主题的想法。

欢迎您的所有意见!

0 投票
0 回答
169 浏览

r - 使用 stringdist 包对带有空格的变量进行字符串匹配

我正在尝试将数据集中的字符串与 jaro 距离相匹配。问题是我得到带有空格的字符串作为匹配项。这是数据:

有没有办法可以处理空格匹配?我期待这样的输出。

0 投票
1 回答
218 浏览

r - R - stringdist 成本设置错误

当我尝试将运营成本设置为

任何想法为什么?

这非常有效(Levensthein 距离)

当我想设置成本时(替换两倍的 indel)

我有这个错误

0 投票
2 回答
8685 浏览

r - R:使用 stringdist 和 stringdistmatrix 生成近似匹配列表

我发现了优秀的包“stringdist”,现在想用它来计算字符串距离。特别是我有一组单词,我想打印出近似匹配,其中“近似匹配”是通过诸如 Levenshtein 距离之类的算法。

我在 shell 脚本中的工作代码非常慢,我能够在 stringdist 中加载并生成一个带有度量的矩阵。现在我想将该矩阵归结为一个较小的矩阵,该矩阵仅具有近似匹配,例如,度量非零但小于某个阈值。

好的,现在我有一个(大)dist,我如何将它减少回一个列表,其中输出类似于

仅适用于度量非零且小于 n=5 的情况?我找到了“apply()”,它可以让我进行测试,现在我需要弄清楚如何使用它。

该问题并非特定于 stringdist 和 stringdistmatrix 并且是非常基本的 R,但我仍然被卡住了。我怀疑答案涉及子集(),但我不知道如何将“dist”转换为其他东西。