问题标签 [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 投票
0 回答
74 浏览

r - Windows 与 linux 上的 stringdist 性能(红帽)

我最近在 R 中的 Windows 机器上开发了一个模糊字符串匹配例程。我对速度感到非常满意。现在我尝试在虚拟红帽服务器上运行相同的程序,但速度要慢得多,即大约一个因素。100.整个过程在Windows机器上耗时1小时(6核,Intel,3.4Ghz)

我基本上做的是这样的:

在 redhat 机器(14 核,AMD,2.6 GHz)上,我在启用了 openblas 的情况下运行 R。r-package stringdist 在版本 0.9.4.1 的两台机器上都运行 上面的命令运行了几百万次。奇怪的是,它甚至似乎放慢了速度。启动该过程时,我的日志告诉我:

几个小时后它告诉我:

在 Windows 机器上,这看起来像这样(6 个进程正在写入日志):

在 Windows 机器上,我们不使用 RevolutionR(或其 R-open-MS 变体)。不知道它是否使用 mkl,但实际上在使用 R 中的字符类时并不重要。可能是某种编码问题吗?当使用 Rprof 进行分析时,它所花费的绝对时间在 windows 和 linux 上的报告不同。关于相对时间,只有 enc2utf8 似乎在 linux 上更为突出。

还有其他想法吗?谢谢马丁

0 投票
1 回答
962 浏览

python - Levenshtein 实现能够处理大字符串和向量

R 中有一个名为的stringdist,其中包含用于计算 Levenshtein 字符串距离的函数。这个包有两个问题:

第一个它不适用于大字符串,例如:

向量中的第二距离是按向量元素的字符而不是按整个向量计算的:

我想得到最后一个命令 4 的结果:因为需要 4 次替换(对应位置上的 4 个向量元素不同)。在这种情况下,我可以获取非 0 的值并计算它们,例如:r <- stringdist(a.vec, b.vec, method = "lv"); length(r[r!=0]). 但它在以下示例中不起作用:

我想得到最后一个命令 1 的结果(在第一个向量的第一个位置插入 2)。

PS还有内置的实现,但它也不适用于大字符串(老实说,我不知道它是如何处理向量的,因为我不明白它的输出):

是否有任何实现(最好在 python、perl 或 R 中)满足我的要求?非常感谢。

PPS我有多个文件,其中每行包含 1 ~ 500 的数字(这就是为什么我需要将例如 347 视为一个元素而不是由 3、4、7 组成的字符串,因为 3、4、7 是另一个单独的数字)。这些文件有 ~ 250000 行。我想知道这些文件彼此之间有多相似。我想 10k*10k 大小是问题所在。但这里提到的 Levenshtein 算法只使用 2*10k 大小(如果两个字符串都是 10k 长)。我想诀窍是它只计算结果而忘记了结果是如何计算的,但这对我来说没问题。汉明距离对我来说还不够,因为我需要考虑插入、删除、替换,在汉明中这两个字符串1234567890 0123456789是完全不同的,但在 Levenshtein 中它们是相似的。

0 投票
1 回答
248 浏览

r - Compare item in one row against all other rows and loop through all rows using data.table - R

I'm combining similar names using stringdist(), and have it working using lapply, but it's taking 11 hours to run through 500k rows and I'd like to see if a data.table solution would work faster. Here's an example and my attempted solution so far built from readings here, here, here, here, and here, but I'm not quite pulling it off:

#xA;

I'm currently using lapply() to cycle through the strings in the cartype column and bring together those rows whose cartype names are closer than a specified value (.08).

#xA;

Data Table Attempt:

#xA;

An intermediate step: This code pulls similar names based on the row's value that I manually plug into myfun(), but it repeats that value for all the rows.

#xA;

I'm now trying to cycle through all the rows using set(). I'm close, but although the code appears to be correctly matching the text from the 12th column (cartype) it's returning the values from the first column, mpg:

#xA;

Now, this is pretty hacky, but I found that if I create a copy of the cartype column and place it in the first column it pretty much works, but there must be a cleaner way to do this. Also, it would be nice to keep the output in a list form like the lapply() output above as I have other post-processing steps set up for that format.

#xA;
0 投票
1 回答
3886 浏览

r - stringdist 包中的 Jaccard 相似度以匹配字符串中的单词

我想在 stringdist 函数中使用 Jaccard 相似度来确定词袋的相似度。据我所知,使用 Jaccard 仅匹配字符串中的字母。

所以我们在这里看到它计算了'cat'和'cat','dog'和'dog'和'person'和'ufo'的相似度。

我还尝试将单词转换为 1 个长文本字符串。以下方法是我需要的,但它仍在计算 1 - (共享 2-gram 的数量/唯一 2-gram 的总数):

我如何让它通过单词计算相似度?

0 投票
2 回答
240 浏览

r - 如何以编程方式查找句子中特定单词的变体?

有时,您获得的数据并不干净,并且使用的单词、拼写错误或被操纵的单词会有所不同。我们能找到与句子中的单词最相似的例子吗?

例如,如果我正在寻找单词“Awesome”,它已被用作句子中的变体,例如

0 投票
1 回答
288 浏览

r - 为什么 R stringdist 以 q-gram 距离返回 Inf,其中一个字符串比 q 短?

我知道 q-gram 距离是两个字符串的 q-gram 向量之间的绝对差之和。但是当其中一个字符串比所选的 q 短时,我看到了一些奇怪的行为。

所以对于这两个字符串,虽然qgrams函数是正确的:

stringdist函数返回:

而不是返回:

我错过了什么还是这是一个错误?谢谢。

stringdist 版本:0.9.4.1 和 0.9.4.2

0 投票
1 回答
1650 浏览

r - 计算 2 个向量中每个单词之间的 Jaccard 相似度

我需要计算 2 个向量中每个单词之间的 Jaccard 相似度。一个字一个字。并提取最相似的词。

这是我糟糕的慢代码:

请帮我改进和美化这个大数据框的代码。

0 投票
0 回答
440 浏览

r - R中的adist以匹配模糊字符串

我有两个 Excel 表格,其中包含来自两个不同保险提供商的保险索赔数据。我需要找到在两个提供商下提出索赔的个人案例。

如果它们看起来可能是相同的名称,我希望有一些配对名称的东西,但如果它在另一张表中找不到足够相似的名称,则什么也不做。从我读过的内容来看,我认为我需要为此使用模糊字符串(也许还有 DL 距离)。我知道 R 有一个字符串距离函数 adist,但我正在努力学习如何正确使用它。

例如:

所以在这里它应该认识到 Emily S. Lo 和 Emily Lo 是同一个人,并且 Clara Smith 和 Ms.Smith 是同一个人,并给我一个包含他们的姓名和信息的列表。我该怎么做呢?

我尝试复制此人所做的事情:http: //bigdata-doctor.com/fuzzy-string-matching-survival-skill-tackle-unstructured-information-r/ 我尝试使用他们的数据,复制/粘贴他们的代码并保留得到 0x0 结果。

0 投票
1 回答
65 浏览

r - 从 R 中的数据框中删除包含相同或单词排列句子的行

我有一个带有文本的数据框

我想过滤掉所有重复的内容,以及所有具有相同单词但顺序不同的内容。这样我得到:

我知道如何用 stringdist 获得两个单词的距离。

但由于我有很长的数据框,我不想遍历所有条目。

如何过滤掉相似的术语?

谢谢乔尔格

0 投票
2 回答
37 浏览

r - 保持编辑距离内的标题

我正在使用stringdist. 输出将输入替换为编号列表,而不是正在比较的实际字符串。这是我目前拥有的:

我希望输出如下所示,以便我可以看到编辑距离的来源。