使用pandas DataFrame计算Levenshtein距离
我正在尝试计算莱文斯坦距离,这是一个关于字符串之间差异的度量,使用的是一个叫做pandas的DataFrame
。我用的是这个库来实现。
In [22]: df = pd.DataFrame({'id' : [1,2,3,4,5,6,7],
'path' : ["abc,cde,eg,ba","abc,cde,ba","abc,yz,zx,eg","abc,cde,eg,ba","abc,cde","abc","cde,eg,ba"]})
In [23]: df
Out[23]:
id path
0 1 abc,cde,eg,ba
1 2 abc,cde,ba
2 3 abc,yz,zx,eg
3 4 abc,cde,eg,ba
4 5 abc,cde
5 6 abc
6 7 cde,eg,ba
下面是我的实现代码。
In [18]: d = {'abc':'1', 'cde':'2', 'eg':'3', 'ba':'4', 'yz':'5', 'zx':'6'}
In [19]: d
Out[19]: {'abc': '1', 'ba': '4', 'cde': '2', 'eg': '3', 'yz': '5', 'zx': '6'}
In [20]: a = [jellyfish.levenshtein_distance(*map(d.get, item)) for item in itertools.combinations(d,2)]
In [21]: a
Out[21]: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
为什么它没有像我想的那样比较字符串?而且为什么只打印出1呢?
In [22]: list(itertools.combinations(d,2))
Out[22]:
[('cde', 'abc'),
('cde', 'ba'),
('cde', 'eg'),
('cde', 'yz'),
('cde', 'zx'),
('abc', 'ba'),
('abc', 'eg'),
('abc', 'yz'),
('abc', 'zx'),
('ba', 'eg'),
('ba', 'yz'),
('ba', 'zx'),
('eg', 'yz'),
('eg', 'zx'),
('yz', 'zx')]
1 个回答
0
这个列表推导式看起来没有设置好。我不太明白你的数据框(DataFrame)和实现之间的关系,但似乎你实现中的列表推导式没有达到你想要的效果。下面的代码是不是你想要的呢?
a = [jf.levenshtein_distance(x[0], x[1]) for x in itertools.combinations(d,2)]