gpt4 book ai didi

r - 在 R 中查找两个向量之间的部分匹配字符串

转载 作者:行者123 更新时间:2023-12-05 06:28:11 24 4
gpt4 key购买 nike

我在 R 中使用两个字符串向量。

第一个,proprietor,包含大约 100,000 个元素,看起来像:

> proprietor
[1] "GERALD RICA LIMITED"
[2] "EUROMASTER STUDIO SRL"
[3] "CENTRE D'ECHANGES INTERNATIONAUX (CEI)"
[4] "RONTEC SERVICE STATION 1A LIMITED"
[5] "MOORGARTH PROPERTIES (LUXEMBOURG) S.A.R.L"
[6] "BEAVRON INVESTMENTS LIMITED"
[7] "MITRALI LIMITED"

另一个,name,包含大约 700,000 个相似的元素:

> name 
[1] "MULTIPOINT HOLDINGS LIMITED"
[2] "NYASA PROPERTY LIMITED"
[3] "WHITE LODGE HOLDINGS LIMITED"
[4] "MULTIPOINT HOLDINGS LIMITED"
[5] "MULTIPOINT HOLDINGS LIMITED"
[6] "JBL INVESTMENT LIMITED"
[7] "DIMBLEBY LIMITED"
[8] "LIDL U.K. GMBH"

我想知道 proprietor 的哪些元素也在 name 中,考虑到可能有一些拼写错误,或者像“LIMITED”这样的词也可以例如写下“LTD”。

我已经尝试过的:

  • proprietor %in% name 返回一个空元素,我知道情况并非如此

  • intersect(proprietor, name) 不起作用,因为我的向量中有重复项

  • 主要是,我尝试使用 agrep() 进行循环以允许部分匹配:

    for (i in 1:97034) {
if (is.null(agrep(proprietor[i], name, max.distance=0.1, value=TRUE, useBytes=TRUE, costs=NULL, ignore.case=TRUE))=="TRUE") {
test[i] <- 1
} else {
test[i] <- agrep(proprietor[i], name, max.distance=0.1, value=TRUE, useBytes=TRUE, costs=NULL, ignore.case=TRUE)
}
}

它返回错误“regcomp 错误:‘内存不足’”。我从 R 开始,所以 1) 我可以看到这个循环不是最简单的方法 2) 我不知道如何纠正这个内存不足错误。

  • 我也尝试了这篇文章中给出的解决方案:Find matching strings between two vectors in R但我无法实现它(错误消息:错误:断言'tree->num_tags == num_tags'在执行正则表达式时失败:文件'tre-compile.c',第634行。我找不到它来自哪里.)

如有任何关于如何解决此问题的建议,我们将不胜感激!

最佳答案

我会使用函数 adist来自包裹 stringdist .

最小工作示例:

创建一个无意义词的向量并将向量称为a:

a <- c("gkhk", "ololsol", "tyuil", "tyuio", "etytyuli")

修改一些单词(或多或少的修改程度)并将该向量称为b:

b <- c("gwrwkhk", "olseotyuioplsol", "thsyuil", "tasyuio", "etytyuli")

然后计算元素之间的距离

yourdistance <- adist(x = a, y = b, ignore.case = TRUE)

yourdistance将是一个计算元素之间距离的矩阵。

     [,1] [,2] [,3] [,4] [,5]
[1,] 3 15 7 7 8
[2,] 7 8 6 7 7
[3,] 7 10 2 3 5
[4,] 7 10 3 2 5
[5,] 8 11 5 5 0

例如,a[5,]中的“etytyuli”和b[,5]中的“etytyuli”之间的距离将为0,因为我没有将该字符串从a修改为b。

一旦有了这个矩阵,您就可以决定什么对您来说“足够接近”并仅选择那些元素。您还可以使用参数 cost,它允许您为插入、删除或替换赋予不同的成本。

您可能想了解更多相关信息:

https://www.r-bloggers.com/fuzzy-string-matching-a-survival-skill-to-tackle-unstructured-information/

希望对您有所帮助。

关于r - 在 R 中查找两个向量之间的部分匹配字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54560105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com