gpt4 book ai didi

python - 使用 ML 纠正拼写

转载 作者:行者123 更新时间:2023-11-30 09:33:49 24 4
gpt4 key购买 nike

我有一列包含可能包含拼写错误的城市名称。

try:
from StringIO import StringIO
except ImportError:
from io import StringIO

myst="""1 Mumbai
2 Delhi
3 Delhi
4 Mumbai
5 Mumbai
6 Delhi
7 Dolhi
"""
u_cols=['customer_id', 'city']

myf = StringIO(myst)
import pandas as pd
df = pd.read_csv(StringIO(myst), sep=' ', names = u_cols)

当我按城市分组时,我可以看到错误的拼写...

df['city'].value_counts()
Delhi 3
Mumbai 3
Dolhi 1

我可以使用像这样的替换方法轻松纠正它......

df.replace({'Dolhi': 'Delhi'})['city'].value_counts()

但是没有办法知道可能存在的拼写错误。如果有2个相似的单词,则计数较高的那个被认为是正确的。所以在这种情况下,“Delhi”是正确的,“Dolhi”是错误的。是否可以将任何此类“智能”应用于此数据框数据?

最佳答案

您可以计算Levenshtein distance每对城市之间,这是两个字符串相似度的度量。基本上,将一个字符串转换为另一个字符串时必须进行的每次更改(例如更改字符或添加/删除字符)都会将编辑距离增加一。 nltk包包含一个 edit_distance() 函数,它返回 Levenshtein 距离。

您可以使用 itertools.combinations() 迭代所有唯一的城市对,并检查 Levenshtein 距离是否低于某个特定的阈值,例如在此示例中为 1。请注意,此阈值需要进行一些手动调整,以便在仍捕获所有拼写错误的同时不会合并不同的城市名称。

然后,您可以通过比较数据集中的使用频率来找出正确的名称(下面的main_name)和错误的名称(下面的mistake)。当然,前提是人们大多数时候都会正确地写出城市名称。

import itertools
from nltk.metrics import edit_distance

MAGIC_THRESHOLD = 1

city_names = df['city'].value_counts()

for name_a, name_b in itertools.combinations(city_names.index, 2):
if edit_distance(name_a, name_b) <= MAGIC_THRESHOLD:
count_a, count_b = city_names[name_a], city_names[name_b]
main_name, mistake = (name_a, name_b) if count_a > count_b else (name_b, name_a)
df = df.replace({mistake: main_name})

print(df['city'].value_counts())

这给了我们结果:

Delhi     4
Mumbai 3

关于python - 使用 ML 纠正拼写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49450626/

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