gpt4 book ai didi

用最频繁的模糊匹配替换字符串

转载 作者:行者123 更新时间:2023-12-04 10:37:52 25 4
gpt4 key购买 nike

我有一个非结构化名称的数据框,我想在一列中创建一个清理名称的“主”列表,另一列中的所有变体。我正在使用 stringdist包裹。下面是一个小例子:

library(dplyr) # for pipes 
library(tidyr) # for expand_grid()
library(stringdist)

words <- c("dog","dot","don","con","cry","croak","cat","dogg", "dogy", "dog", "cat", "dog")
# compare everything to everything
words_df <- expand_grid(raw = words, clean = words) %>%
mutate(dist = stringdist(raw, clean, method = "jw") %>%
# compute word frequency
group_by(clean) %>%
mutate(count = n()) %>%
filter(dist < 0.3)

这会产生一个 df,其中包含所有足够相似组合的距离和字数:
|raw |clean |      dist| count|
|:---|:-----|---------:|-----:|
|dog |dog | 0.0000000| 36|
|dog |dot | 0.2222222| 12|
|dog |don | 0.2222222| 12|
|dog |dogg | 0.0833333| 12|
|dog |dogy | 0.0833333| 12|
|dog |dog | 0.0000000| 36|
|dog |dog | 0.0000000| 36|
|dot |dog | 0.2222222| 36|
|dot |dot | 0.0000000| 12|
|dot |don | 0.2222222| 12|


您可以在 clean 中看到这一点。列我有两个条目,分别是“dog”和“dogg”,我想将它们合并为一个条目(狗),因为字符串“dog”出现得更频繁。

这是我迄今为止尝试过的:

dict <- words_df %>%
mutate(clean_new = ifelse(dist < 0.085, words_df[which.max(words_df$count)][[1]][1], clean))

结果是:
|raw |clean |      dist| count|clean_new |
|:---|:-----|---------:|-----:|:---------|
|dog |dog | 0.0000000| 36|NA |
|dog |dot | 0.2222222| 12|dot |
|dog |don | 0.2222222| 12|don |
|dog |con | 0.4444444| 12|con |
|dog |cry | 1.0000000| 12|cry |
|dog |croak | 0.4888889| 12|croak |
|dog |cat | 1.0000000| 24|cat |
|dog |dogg | 0.0833333| 12|NA |
|dog |dogy | 0.0833333| 12|NA |
|dog |dog | 0.0000000| 36|NA |


本质上,我想要创建的是一个包含单词所有变体的字典,基于最接近的单词匹配的频率。

谢谢大家!

最佳答案

dplyr pipe 语句将返回一个包含 9 行的数据框,原始 words 中的每个唯一元素对应一个数据框。向量。首先我们group_by raw为每个唯一单词创建一个组的列,然后是 filter通过你的距离阈值,然后在clean中找到对应的词在原始数据集中频率最高。在您的示例中,除了“dog”的两个变体之外,所有单词都匹配自己。

代码

words_df %>%
group_by(raw) %>%
filter(dist < 0.085) %>%
summarize(clean = clean[which.max(count)])

输出
# A tibble: 9 x 2
raw clean
<chr> <chr>
1 cat cat
2 con con
3 croak croak
4 cry cry
5 dog dog
6 dogg dog
7 dogy dog
8 don don
9 dot dot

关于用最频繁的模糊匹配替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60081935/

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