正则表达式&x2B;python挑战!争论数据';几乎是正常的
很抱歉发布这个消息,但是我已经花了很多时间在这上面,但是没有成功。因此,正则表达式+Python对所有人来说都是一个挑战: 我处理的数据大多是定期格式化的。公司列表组合成一个字符串,如正则表达式&x2B;python挑战!争论数据';几乎是正常的,python,regex,Python,Regex,很抱歉发布这个消息,但是我已经花了很多时间在这上面,但是没有成功。因此,正则表达式+Python对所有人来说都是一个挑战: 我处理的数据大多是定期格式化的。公司列表组合成一个字符串,如 `Company Inc,Company, LLC,Company` 没有引号来描述条目。使用上面的常规示例,我可以: >>> re.split(r',\b', 'Company Inc,Company, LLC,Company')
`Company Inc,Company, LLC,Company`
没有引号来描述条目。使用上面的常规示例,我可以:
>>> re.split(r',\b', 'Company Inc,Company, LLC,Company')
['Company Inc', 'Company, LLC', 'Company']
不幸的是,某些字符串的格式不规则,如:
`IBP, Inc,Tyson Foods,Inc.`
其中,,Inc
与食品
之间没有空格。因此,使用r',\b'
,我得到:
>>> re.split(r',\b', 'IBP, Inc,Tyson Foods,Inc.')
['IBP, Inc', 'Tyson Foods', 'Inc.']
['IBP, Inc', 'Tyson Foods,Inc.']
我想得到这个:
>>> re.split(r',\b', 'IBP, Inc,Tyson Foods,Inc.')
['IBP, Inc', 'Tyson Foods', 'Inc.']
['IBP, Inc', 'Tyson Foods,Inc.']
在这种情况下,您会怎么做?这取决于您必须计算的条目数。基本上,只要有高质量的数据,你就完蛋了。这意味着您尝试应用的任何自动化都会在处理数据时遇到问题 您必须手动修复此问题,以将数据质量恢复到其中。数据质量问题是计算机很难处理的问题之一 我个人会做的是写一个快速而肮脏的启发,试图确定不符合预期结果的条目。例如,在您的示例中,我将查找“Inc”或“LLC”加上或减去两个字符的拆分条目。这将捕获那些似乎不能提供比公司类型高得多的条目。你会看到“公司”,知道真正的公司名称一定在附近
一旦你有了这些,你就可以手工清理你的数据,然后重新处理。当您可以证明将这些纠正措施作为程序的一部分编写是合理的时,这是对大约一百万个条目的最佳选择。不过,除非你是谷歌,否则几乎可以保证你会发现它是最快、最简单的人眼搜索工具。如果你知道,你可以将防分裂字符串添加到负面前瞻中
r',\b(?!Inc\.)'
用稍微不同的术语来描述Mike M的回答,如果您可以构建一个可靠的非相关标记列表,如“Inc.”、“Inc”和“LLC”,那么您可能有一种解析的方法。即使这样,您也可能无法获得像split()这样的自动工具来为您工作。您可能需要自己滚动。我会首先在逗号上进行拆分,以获得如下列表:
['IBP', 'Inc', 'Tyson Foods', 'Inc.']
然后第二次遍历数据,其中极不可能的公司名称,如“Inc”、“Inc.”、“LLC”、“GmbH”等,与列表中的前一项合并:
badList = originalData.split(',')
goodList = []
rejectList = ['Inc', 'Inc.', 'LLC', 'GmbH'] # etc.
for pseudoName in badList:
pseudoName = pseudoName.strip()
if pseudoName in rejectList:
goodList[-1] = goodList[-1] + ", " + pseudoName
else:
goodList.append(pseudoName)
如果您以后发现您的数据中有“Farmers Group,The”等条目,并将文章放在正确的位置,此方法还可以让您进行更复杂的操作。使用ms excel解决问题您的规则没有明确定义-这是不可能的。
Inc.,LLC,Inc.
应该如何解析<代码>“公司”、“有限责任公司”、“公司”<代码>'Inc.,LLC','Inc.<代码>“公司”、“有限责任公司”?你用人类的直觉和经验来划分这些名字。除非你能用一系列规则来表达你的直觉,否则正则表达式不会帮你。真的吗?我可能会用逗号分割整件事,然后将Inc[.]
,LLC
,等等的特殊情况合并回来,假设它总是公司名称[,]一些特殊的东西。您希望c,Comp
以逗号分隔,但s,Inc
不希望,如果没有特殊的大小写,我看不出会发生什么。也可以明确说明。检查您的数据并搜索任何、Inc
或、LLC
和其他特殊情况,然后分别替换为、Inc
和、LLC
。然后使用你的正则表达式。问题是公司列表是如何组合成这样一个字符串的?我会回去以更好的格式获取数据。这很好,谢谢。现在我需要查找这个语法来了解它是如何工作的!但是,是的,再次感谢你回答这个问题。这正是我要找的。因此,很多人要么对我的问题的开放性耿耿于怀(尽管我试图以一种获得你提供的回答的方式来提问),要么试图告诉我根本不要使用正则表达式。除了Excel,有些人还试图向我指出一些东西,比如欧芹(解析器),等等。我很感谢你在我试图提出问题时看到我的问题,并提供我想要的答案。是的,很吓人。老实说,在程序的这一部分,我更喜欢糟糕的拆分而不是复杂的拆分。当涉及到这种类型的代码时,我不是一个好的程序员,所以我自己的解析很快就会失控。