首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大写字母(例)不匹配(字符串)的Fuzzyjoin / stringdist_join权重

大写字母(例)不匹配(字符串)的Fuzzyjoin / stringdist_join权重
EN

Stack Overflow用户
提问于 2020-12-31 21:27:39
回答 1查看 81关注 0票数 0

与R一起工作,我正在寻找在string_dist_left_join()中加权大小写(即大小写)的方法

下面是一个可重复的例子:

代码语言:javascript
复制
library(tidyverse)
library(fuzzyjoin)

tibble1 <- tibble(words = c("Bedford", "Maidenhead", "New Forest", "Tier 3", "Citizenship", "Crown"))

tibble2 <- tibble(words = c("bedfords", "bedsford", "BEDFord", "Maidenshead", "Maidenhed", "News forest", "Tier 3", "Citisenships", "crowned", "crows"))

osa <- stringdist_left_join(tibble1, tibble2, distance_col = "distance", max_dist = 5, method = "osa", weight = c(d = 0.1, i = 0.1, s = 1, t = 1))

上面的代码是用来在一对小毛条上复制一个由模糊连接驱动的stringsidt_left_join的代码。输出如下所示:

代码语言:javascript
复制
# A tibble: 55 x 3
   words.x words.y      distance
   <chr>   <chr>           <dbl>
 1 Bedford bedfords        0.3  
 2 Bedford bedsford        0.3  
 3 Bedford BEDFord         0.6  
 4 Bedford Maidenshead     1.4  
 5 Bedford Maidenhed       1.2  
 6 Bedford News forest     1.00 
 7 Bedford Tier 3          0.900
 8 Bedford Citisenships    1.7  
 9 Bedford crowned         1.00 
10 Bedford crows           1.00 
# … with 45 more rows

我想用某种方式来衡量资本化,比如把贝德福德和B埃德福特进行比较:我希望这比贝德福德和贝德福德更糟糕,但比贝德福德更适合福特。选项ignore_case = TRUE将Bedford视为与贝德福德的完美匹配。

我喜欢fuzzyjoin包,我刚刚发现了您可以为每个删除、插入、替换和移位传递给字符串的自定义权重。这太棒了,玩具可以玩,参数要调。

我还想做的是调整一下情况(资本化?)匹配。我可以选择在ignore_case = TRUE中使用stringdist_left_join,(实际上,重量为0或1),但是作为一个恼人的cur,我想在0到1之间进行权衡。

有人知道我错过了什么地方吗?

或者答案是:做的很难吗?我想可能还有很长的路要走,包括比较运行tolower()之前和之后的距离,或者计算一个比较ignore_case = TRUEignore_case = FALSE的加权距离,但是有没有人知道我可以用一个更优雅的方法或包来完成这个任务呢?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-01-01 00:36:23

您可以运行两次,一次使用ignore_case = TRUE,一次使用FALSE,然后找到两个距离的适当线性组合。

类似于lambda * (distance_FALSE - distance_TRUE) + distance_TRUE,在lambda中,与其他字符串差异相比,您更不关心大写差异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65525680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档