单位名称相似判断
# 安装和加载stringdist包
install.packages("stringdist")
library(stringdist)
# 定义字符串
str1 <- "疾控中心"
str2 <- "疾病预防控制中心"
str1 <- "卫健委"
str2 <- "卫生健康委员会"
# 计算 Jaro-Winkler 距离
jw_distance <- stringdist(str1, str2, method = "jaccard")
# 自定义字符串相似度计算函数
custom_similarity <- function(str1, str2) {
# 将字符串转换为字符向量
chars1 <- strsplit(str1, "")[[1]]
chars2 <- strsplit(str2, "")[[1]]
# 获取字符向量的长度
len1 <- length(chars1)
len2 <- length(chars2)
# 如果 str1 比 str2 长,则交换它们的位置
if (len1 > len2) {
temp <- chars1
chars1 <- chars2
chars2 <- temp
len1 <- length(chars1)
len2 <- length(chars2)
}
# 检查 chars1 中的字符是否按顺序出现在 chars2 中
index <- 1
match_count <- 0
for (i in 1:len1) {
found <- FALSE
for (j in index:len2) {
if (j <= len2 && chars1[i] == chars2[j]) {
found <- TRUE
match_count <- match_count + 1
index <- j + 1
break
}
}
if (found) {
next
}
}
# 计算相似度
similarity <- match_count / len1
return(similarity)
}
# 测试示例
str1 <- "疾控中心"
str2 <- "疾病预防控制中心"
str3 <- "中心疾控"
similarity12 <- custom_similarity(str2, str1)
similarity13 <- custom_similarity(str2, str3)
评论
发表评论