Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式&x2B;python挑战!争论数据';几乎是正常的_Python_Regex - Fatal编程技术网

正则表达式&x2B;python挑战!争论数据';几乎是正常的

正则表达式&x2B;python挑战!争论数据';几乎是正常的,python,regex,Python,Regex,很抱歉发布这个消息,但是我已经花了很多时间在这上面,但是没有成功。因此,正则表达式+Python对所有人来说都是一个挑战: 我处理的数据大多是定期格式化的。公司列表组合成一个字符串,如 `Company Inc,Company, LLC,Company` 没有引号来描述条目。使用上面的常规示例,我可以: >>> re.split(r',\b', 'Company Inc,Company, LLC,Company')

很抱歉发布这个消息,但是我已经花了很多时间在这上面,但是没有成功。因此,正则表达式+Python对所有人来说都是一个挑战:

我处理的数据大多是定期格式化的。公司列表组合成一个字符串,如

`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,有些人还试图向我指出一些东西,比如欧芹(解析器),等等。我很感谢你在我试图提出问题时看到我的问题,并提供我想要的答案。是的,很吓人。老实说,在程序的这一部分,我更喜欢糟糕的拆分而不是复杂的拆分。当涉及到这种类型的代码时,我不是一个好的程序员,所以我自己的解析很快就会失控。