gpt4 book ai didi

python - 使用 Levenshtein 距离替换另一列中的单词 w.r.t 单词

转载 作者:行者123 更新时间:2023-11-28 21:54:31 25 4
gpt4 key购买 nike

假设我有一个数据框df1:

Sr       A              B                            C
1 rains It rain there. It rains there
2 plane This is a vertical planes This is a vertical plane
3 tree Plant a trees Plant a tree

C 列是我的预期输出。我需要将 B 列字符串中的每个单词与 A 中的单词进行比较,如果 Levenshtein 距离为 1,则替换它。

我的方法:

import jellyfish as jf
def word_replace(str1):
comp = #don't know how to store value of column A in this variable.
for word in str1.split():
if jf.levenshtein_distance(word,comp) == 1:
word = comp
else:
pass
return str1

df1['C'] = df1['B'].apply(word_replace)

第二件事,如果 A 列有像 "near miss" 这样的双词怎么办?我将如何修改上面的代码?例如:

 Sr       A              B                            C
1 near miss that was a ner mis that was a near miss

最佳答案

您在一个问题中提出了两个问题,这在 Stack Overflow 上绝对不是一个好主意。我只是要回答你的第一个问题,如果你想让别人看看你的第二个问题,那么我建议你专门为此写一个新问题。

pd.DataFrame.apply可以跨行或跨列工作,您希望单独处理每一行,因此您必须传递 axis=1 关键字参数。

下面是一些解决您问题的代码,它使用 list comprehension利用 ternary operator选择需要替换的单词。然后使用 str.join() 将此列表连接在一起.

最初您的代码是在拆分字符串上迭代,但这行不通 as you cannot modify them as you are iterating over the list .它还假设函数的输入是一个字符串,这是不正确的,因为它将是一个 pandas.Series 对象。

这是一段简化的代码,没有考虑标点符号之类的东西,我把它留给读者作为练习。

import pandas as pd
import jellyfish as jf

data1 = {'A':['rains','plane','tree'],'B':['It rain there','This is a vertical planes','Plant a trees']}
df1 = pd.DataFrame(data1)

def word_replace(row):
comp = row['A']
str1 = row['B']

out = ' '.join([comp if jf.levenshtein_distance(word, comp) == 1
else word for word in str1.split()])
return out

df1['C'] = df1.apply(word_replace, axis=1)

关于python - 使用 Levenshtein 距离替换另一列中的单词 w.r.t 单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24078723/

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