我听说过聚类来分组类似的数据.我想知道它在String的特定情况下是如何工作的.
我有一张超过10万字的表.
我想识别具有一些差异的相同单词(例如:)house, house!!, hooouse, HoUse, @house, "house", etc....
需要什么来识别群集中的相似性并对每个单词进行分组?为此更推荐什么算法?
我想在MATLAB中对文本进行分层凝聚聚类.说,我有四句话,
I have a pen.
I have a paper.
I have a pencil.
I have a cat.
Run Code Online (Sandbox Code Playgroud)
我想对上面四个句子进行聚类,看看哪个更相似.我知道统计工具箱有像pdist测量成对距离,linkage计算聚类相似性等命令.一个简单的代码如:
X=[1 2; 2 3; 1 4];
Y=pdist(X, 'euclidean');
Z=linkage(Y, 'single');
H=dendrogram(Z)
Run Code Online (Sandbox Code Playgroud)
工作正常并返回树形图.
我想知道如上所述我可以在文本上使用这些命令.有什么想法吗 ?
更新:
感谢Amro.读取理解并计算字符串之间的距离.代码如下:
clc
S1='I have a pen'; % first String
f_id=fopen('events.txt','r'); %saved strings to compare with
events=textscan(f_id, '%s', 'Delimiter', '\n');
fclose(f_id); %close file.
events=events{1}; % saving the text read.
ii=numel(events); % selects one text randomly.
% store the texts in a cell array
for …Run Code Online (Sandbox Code Playgroud) 我在长列表中的数千个名称的数据框中有一个列表。许多名称之间的差异很小,因此略有不同。我想找到一种匹配这些名称的方法。例如:
names <- c('jon smith','jon, smith','Jon Smith','jon smith et al','bob seger','bob, seger','bobby seger','bob seger jr.')
Run Code Online (Sandbox Code Playgroud)
我已经amatch在stringdist函数以及中进行了研究agrep,但是所有这些都需要一个主名称列表,用于与另一个名称列表进行匹配。就我而言,我没有这样的主列表,因此我想通过识别具有高度相似模式的姓名从数据中创建一个主列表,以便我可以查看它们并确定它们是否是同一个人(在很多情况下,的情况下)。我想要一个新列中的输出,可以帮助我知道这些是可能的匹配,也许是基于Levenshtein距离之类的某种相似性得分。也许是这样的:
names match SimilarityScore
1 jon smith a 9
2 jon, smith a 8
3 Jon Smith a 9
4 jon smith et al a 5
5 bob seger b 9
6 bob, seger b 8
7 bobby seger b 7
8 bob seger jr. b 5
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?