我在数据框中有两个非常重要的,用户输入的信息列。除了一个问题:它们的大部分内容都得到了清理:拼写和名称的编写方式有所不同。例如,对于一个名称,我有五个条目:“红色岩石峡谷”,“ redrcks”,“ redrock峡谷”,“红色岩石峡谷”。该数据集太大,我无法手动进行清理(200万个条目)。有什么策略可以用代码清除这些功能?
答案 0 :(得分:1)
我会考虑在这里进行phonetic string matching。这种方法的基本思想是为每个输入的字符串获取语音编码,然后根据其编码对拼写变化进行分组。然后,您可以选择每个组中最频繁出现的变体形式来作为“正确”的拼写。
语音编码有几种不同的变体,而jellyfish是Python中用于尝试其中的一个很好的软件包。这是一个如何与Soundex编码一起使用的示例:
import jellyfish
import pandas as pd
data = pd.DataFrame({
"name": [
"red rocks canyon",
"redrcks",
"redrock canyon",
"red rocks canyons",
"bosque",
"bosque escoces",
"bosque escocs",
"borland",
"borlange"
]
})
data["soundex"] = data.name.apply(lambda x: jellyfish.soundex(x))
print(data.groupby("soundex").agg({"name": lambda x: ", ".join(x)}))
此打印:
name
soundex
B200 bosque
B222 bosque escoces, bosque escocs
B645 borland, borlange
R362 red rocks canyon, redrcks, redrock canyon, red...
这绝对不是完美的,您必须小心,因为它可能会过于激进地将事情分组,但是我希望它能给您一些尝试的机会!