在python中将相似的字符串分组为单个组[重复]
Posted
技术标签:
【中文标题】在python中将相似的字符串分组为单个组[重复]【英文标题】:Grouping similar strings into single group in python [duplicate] 【发布时间】:2018-09-15 22:13:15 【问题描述】:我在数据框中有大约 30,000 个银行名称。我想将它们分组到一个基本组中,因为它们中的大多数都是相同的,只是它们位于不同的位置。但是我不知道里面有哪些银行名称。
下面给出的是数据集的一个子集。从这些数据中,我可以识别出 2 家银行,即 ROYAL BANK 和 BARCLAYS。所以我想要2组。
皇家银行(计数:13) 巴克莱(count:7)
ROYAL BANK OF CANADA
ROYAL BANK OF CANADA
THE ROYAL BANK OF SCOTLAND PLC
THE ROYAL BANK OF SCOTLAND PLC
ROYAL BANK OF CANADA CAYMAN ISLANDS
RBC ROYAL BANK (TRINIDAD AND TOBAGO), LTD.
RBC ROYAL BANK (TRINIDAD AND TOBAGO), LTD.
THE ROYAL BANK OF SCOTLAND INTERNATIONAL, LTD.
THE ROYAL BANK OF SCOTLAND INTERNATIONAL LTD.
ROYAL BANK OF SCOTLAND, N.V.
RBC ROYAL BANK (BAHAMAS), LTD.
ROYAL BANK OF SCOTLAND PLC
ROYAL BANK OF SCOTLAND PLC
BARCLAYS BANK PLC
BARCLAYS BANK DELAWARE
BARCLAYS BANK OF GHANA, LTD.
BARCLAYS BANK DELAWARE
BARCLAYCARD GERMANY
BARCLAYS BANK PLC
BARCLAYS BANK PLC
还有其他银行也有类似的模式,我想有一个通用的方法来识别列表唯一组(银行名称)并在这些组下对类似的组进行分组。
【问题讨论】:
名称相似并不意味着它们是同一家银行 - 有很多彼此无关的“皇家银行”。如果您希望将它们分组,则需要定义精确的分组规则(即什么是相似的,什么不是......)。 【参考方案1】:你想要这样的东西吗?
[ ROYAL BANK ]
ROYAL BANK OF CANADA
ROYAL BANK OF CANADA
THE ROYAL BANK OF SCOTLAND PLC
THE ROYAL BANK OF SCOTLAND PLC
ROYAL BANK OF CANADA CAYMAN ISLANDS
RBC ROYAL BANK (TRINIDAD AND TOBAGO), LTD.
RBC ROYAL BANK (TRINIDAD AND TOBAGO), LTD.
THE ROYAL BANK OF SCOTLAND INTERNATIONAL, LTD.
THE ROYAL BANK OF SCOTLAND INTERNATIONAL LTD.
ROYAL BANK OF SCOTLAND, N.V.
RBC ROYAL BANK (BAHAMAS), LTD.
ROYAL BANK OF SCOTLAND PLC
ROYAL BANK OF SCOTLAND PLC
[ BARCLAY ]
BARCLAYS BANK PLC
BARCLAYS BANK DELAWARE
BARCLAYS BANK OF GHANA, LTD.
BARCLAYS BANK DELAWARE
BARCLAYCARD GERMANY
BARCLAYS BANK PLC
BARCLAYS BANK PLC
使用的正则表达式是
(?m)^\s*([A-Z\s]*?(?:(ROYAL BANK)|(BARCLAY)).*)$
Demo,,,,其中匹配的银行名称被捕获到 group 1
,detected keyword
(ROYAL BANK, BARCLAY
) 被捕获到 group 2
或 group 3
,用于在 python 脚本中使用它们按名称对银行进行分类。
下面的python脚本可以解释一些关于name classification
你想要什么的基本概念。
import re
ss=""" copy & paste sample text in this area """
royalbank=[]
barclay=[]
regx= re.compile(r'(?m)^\s*([A-Z\s]*?(?:(ROYAL BANK)|(BARCLAY)).*)$')
matching=regx.findall(ss)
for m in matching:
if m[1] !="":
royalbank.append(m[0])
elif m[2] !="":
barclay.append(m[0])
print("\n[ ROYAL BANK ]")
for e in royalbank: print(e)
print("\n[ BARCLAY ]")
for e in barclay: print(e)
【讨论】:
以上是关于在python中将相似的字符串分组为单个组[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在更长的字符串中,如何在 PostgreSQL(和/或 Python 3)中将一个字符(例如,'a')和一个变音字符(例如,'U+030A')转换为单个字符('å')[重复]