是否有代码对列中包含的相似单词进行分组

Posted

技术标签:

【中文标题】是否有代码对列中包含的相似单词进行分组【英文标题】:Is there code to group similar words contained in a column 【发布时间】:2019-12-25 09:56:57 【问题描述】:

是否有代码可以用来区分 Python 中具有相似字符串的单词?我想对单词进行分组,但是如果我将数据框中的 WHERE FUNCTION 用于 COFFEE 和 FEE 之类的单词,则这些单词将被视为相同,这是我不想要的。

数据框如下所示:

id        transaction           grouping
 1         ATM FEES               FEES
 2         McDonalds              MD
 3         COFFEE SHOP            FEES
 4         POS ZARA               ZARA
 5         TASTY COFFEE           FEES
 6         FREDDIES               OTHER
 7         FEES:Monthly           FEES
 8         WITHDRAWAL FEES ATM    FEES
 9         MONTE COFFEE SHOP      FEES

但我希望输出如下所示:

id        transaction            grouping
 1         ATM FEES                FEES
 2         McDonalds               MD
 3         COFFEE SHOP             COFFEE
 4         POS ZARA                ZARA
 5         TASTY COFFEE            COFFEE
 6         FREDDIES                OTHER
 7         FEES:Monthly            FEES
 8         WITHDRAWAL FEES ATM     FEES
 9         MONTE COFFEE SHOP       COFFEE

这是我使用的代码:

tranx['grouping'] = pd.np.where(temp.str.contains("COFFEE"),"COFFEE",
                    pd.np.where(temp.str.contains("McDonalds"), "MD",
                    pd.np.where(temp.str.contains("FEE"), "FEE",
                    pd.np.where(temp.str.contains("ZARA"), "ZARA",OTHER))))

我可以使用其他代码来区分 COFFEE 和 FEE 以便它们不属于同一组吗?

【问题讨论】:

【参考方案1】:

我不太确定您要做什么,但您可以检查字符串是否与列文斯坦距离相似。列文斯坦距离告诉您必须完成多少“更改”才能获得两个相同的字符串。它在 Python Jellyfish 库中得到了很好的实现。

https://jellyfish.readthedocs.io/en/latest/comparison.html#levenshtein-distance

也许这就是你要找的东西。最好的问候。

【讨论】:

以上是关于是否有代码对列中包含的相似单词进行分组的主要内容,如果未能解决你的问题,请参考以下文章

当值在sql中重复时如何对列进行分组

从列表中包含的字符串命名 df 列

另一个文件中包含的 T4 缩进代码

计算形参s所指字符串中包含的单词个数,作为函数值返回

MySQL:对列上的元素进行分组和展平

如何将代码模块中包含的VBA代码放在表单模块中