微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在数据框中的两个字符串列之间执行编辑距离?

如何解决有没有办法在数据框中的两个字符串列之间执行编辑距离?

我有两个数据集:dataset1 和 dataset2(提供图像链接),它们有一个名为 SAX 的公共列,它是一个字符串对象。

dataset1=
         SAX
0    glngsyu
1    zicobgm
2    eerptow
3    cqbsynt
4    zvmqben
..       ...
475  rfikekw
476  bnbzvqx
477  rsuhgax
478  ckhloio
479  lbzujtw

480 rows × 2 columns

dataset2=
         SAX
0    glngsyu
1    zicobgm
2    eerptow
3    cqbsynt
4    zvmqben
..       ...
475  rfikekw
476  bnbzvqx
477  rsuhgax
478  ckhloio
479  lbzujtw

480 rows × 2 columns

我需要输出是将数据集1的“SAX”列转换为数据集2的“SAX”所需的最少编辑(操作)列。有没有办法做到这一点?

谢谢。

解决方法

使用与 textdistance 模块的 Levenshtein 距离:

from textdistance import levenshtein

# Merge the two columns in one dataframe
df = dataset1[['SAX']].merge(dataset2[['SAX']],left_index=True,right_index=True,suffixes=('_1','_2'))

# Compute the Levenshtein distance
df['distance'] = df.apply(lambda x: levenshtein.distance(x['SAX_1'],x['SAX_2']),axis=1)
,

我会使用 pylev 模块来完成这项任务。它是纯 python 的,所以它应该在执行 pip install pylev 后就可以在任何操作系统中工作。为了比较我将利用 zip 的成对元素,请考虑以下简单示例

import pylev
import pandas as pd
df1 = pd.DataFrame({'col1':['some','values','here']})
df2 = pd.DataFrame({'col1':['same','virtues','there']})
dfdist = pd.DataFrame({'dist':[pylev.levenshtein(*i) for i in zip(df1.col1,df2.col1)]})
print(dfdist)

输出

   dist
0     1
1     3
2     1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。