首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对相似的单词进行分组

对相似的单词进行分组
EN

Stack Overflow用户
提问于 2016-02-29 11:04:36
回答 1查看 1.4K关注 0票数 1
代码语言:javascript
复制
CompanyName <- c('Kraft', 'Kraft Foods', 'Kfraft', 'nestle', 'nestle usa', 'GM', 'general motors', 'the dow chemical company', 'Dow')

我想要任何一种:

代码语言:javascript
复制
CompanyName2
Kraft
Kraft
Kraft
nestle
nestle
general motors
general motors
Dow
Dow

但是完全可以这样:

代码语言:javascript
复制
CompanyName2
1
1
1
2
2
3
3

我看到了计算两个单词之间距离的算法,所以如果我只有一个奇怪的名字,我会将它与所有其他名字进行比较,并选择距离最小的一个。但是我有成千上万的名字,我想把它们都分组。

我对弹性搜索一无所知,但elastic包中的某个函数或其他函数能帮我解决这个问题吗?

很抱歉这里没有程序。我知道呀。但这远远超出了我的正常专业领域。

EN

回答 1

Stack Overflow用户

发布于 2016-03-31 04:18:48

解决方案:使用字符串距离

你在正确的轨道上。以下是一些R代码,可以帮助您入门:

代码语言:javascript
复制
install.packages("stringdist") # install this package
library("stringdist") 
CompanyName <- c('Kraft', 'Kraft Foods', 'Kfraft', 'nestle', 'nestle usa', 'GM', 'general motors', 'the dow chemical company', 'Dow')
CompanyName = tolower(CompanyName) # otherwise case matters too much
# Calculate a string distance matrix; LCS is just one option
?"stringdist-metrics" # see others
sdm = stringdistmatrix(CompanyName, CompanyName, useNames=T, method="lcs") 

让我们来看看。这些是使用最长公共子序列度量(尝试其他度量,例如cosine,Levenshtein)计算出的字符串之间的距离。从本质上讲,它们都是衡量字符串共有多少个字符。它们的优缺点超出了这个问答的范围。你可能会发现,对于包含完全相同的子字符串的两个字符串(如dow),其相似度更高。

代码语言:javascript
复制
sdm[1:5,1:5]
            kraft kraft foods kfraft nestle nestle usa
kraft           0           6      1      9         13
kraft foods     6           0      7     15         15
kfraft          1           7      0     10         14
nestle          9          15     10      0          4
nestle usa     13          15     14      4          0

一些可视化效果

代码语言:javascript
复制
# Hierarchical clustering
sdm_dist = as.dist(sdm) # convert to a dist object (you essentially already have distances calculated)
plot(hclust(sdm_dist))

如果你想显式地分组到k个组中,可以使用k-medoids。

代码语言:javascript
复制
library("cluster")
clusplot(pam(sdm_dist, 5), color=TRUE, shade=F, labels=2, lines=0)

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

https://stackoverflow.com/questions/35691268

复制
相关文章

相似问题

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