【问题标题】:Find an match similar elements in two columns in Python在 Python 中的两列中查找匹配的相似元素
【发布时间】:2018-10-29 16:53:10
【问题描述】:

我有一个类似的数据集:

Column1                Column2
 a bc                    cdr
 cd r                    ab c
 bose                    beats
 bea ts                  bo se
 i phone                 sam sung
 samsung                 iphone

如果您注意到两列都包含几乎相似的单词,但在格式方面有所不同并且其中有空格。我希望余弦相似度或序列匹配器等技术将这些与列匹配,以使结果如下所示:

column 1                 column 2 
a bc                      ab c
cd r                      cdr 
bose                      bo se
bea ts                    beats
i phone                   iphone
samsung                   sam sung

请不要,这只是一个示例数据,字符串比这些更复杂。 如何利用 Cosine Similarity 和 Sequence Matcher 等软件包来实现这一目标?

【问题讨论】:

    标签: python pandas nlp logic sequence


    【解决方案1】:

    对于这个问题没有强大的原生pandas 方法。我建议使用fuzzywuzzy 库来解决这个问题。确保你先pip install fuzzywuzzy

    默认情况下,这个库使用Levenshtein distance 来表示字符串相似度。


    from fuzzywuzzy import process
    
    res = [process.extractOne(w, df.Column2)[0] for w in df.Column1]
    df.assign(Column2=res)
    

       Column1   Column2
    0     a bc      ab c
    1     cd r       cdr
    2     bose     bo se
    3   bea ts     beats
    4  i phone    iphone
    5  samsung  sam sung
    

    【讨论】:

    • 花费大量时间才能完成
    • 是的。运行时间为 O(n^2)。有更快的 Levenshtein 距离实现可用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    相关资源
    最近更新 更多