我目前正在尝试对公司名称进行一些自然语言处理。
我写的正则表达式-s+w+('w+|s+w)
这是为了删除连字符后的所有文本,如果它是空格。 接下来,我[.,/#!$%^&*;:{}=-_`''"<>|~()]
删除所有标点符号。第三,我(Reg|Ltd|PLC|NV|LTD|LLC|INC|LLP|US)
去掉公司后缀。最后,有一些名称在字符串的前面和末尾都有回车符,我用"r*n*
解决这个问题。
我想把所有这些正则表达式部分放在一起,因为我在Alteryx和Python中运行它。
请注意:有些带有连字符的公司名称后面没有空格,我需要保留这一点并确保它们不会因标点符号删除而被删除。
如何将所有这些部分组合在一起?而且,我这样做是否正确?最后,在字符串清理之后,我将把这些数据连接到另一个客户端列表,以拉回特定信息。
这就是为什么所有前端都不应该包含自由文本字段,特别是对于公司。
我如何将它们组合成一个模式,还是将每个模式分开是更好的做法?
MY COMPANY X,Y,Z, TENNESSEE CORPORATION L.L.C.
MY COMPANY HOLDINGS, LP. (there is a carriage return after the LP.)
ABN FGDF - NEW YORK - UNITED STATES
COLLEGE-INRIA
ABCDE - UNITED STATES
MANAGEMENT MANAGERS - UNITED STATES
INVESTMENT MANAGEMENT CORPORATION - CANADA
AUTO-CHLOR
之前
MY COMPANY XYZ TENNESSEE CORPORATION
MY COMPANY HOLDINGS
ABN FGDF
COLLEGE-INRIA
ABCDE
MANAGEMENT MANAGERS
INVESTMENT MANAGEMENT CORPORATION
AUTO-CHLOR
后
请注意,COLLEGE-INRIA 保留了,因为连字符和下一个字符之间没有空格。
我猜你已经过了急需回应,但想为后代回答。
首先,这实际上是一个风格问题,即您是将每个正则表达式步骤分开,还是尝试将它们组合成一个令人印象深刻的、难以理解的表达式。(你未来的自己和/或其他人可能会感谢你让他们分开。在某些情况下,减少正则表达式操作有一些性能考虑因素,但总的来说,我想说的是,最好能够回来并理解您一年或更长时间后尝试做的事情,而不是节省几个周期。
其次,正则表达式当然有它的用途,但我总是问自己,在我实际使用它之前,是否有任何方法可以避免使用正则表达式。现在你有两个问题...
最后,考虑到这一点,您可以在 Alteryx 中解决大多数这些解析步骤,而无需使用正则表达式并且具有类似的性能。
可以使用- 文本到列工具使用模式"-"(空格 + 连字符(删除连字符后跟空格,然后仅在工作流的其余部分使用由此产生的第一列(或使用选择工具完全删除垃圾列(。
- 您可以使用数据清理工具删除所有空格(包括 \r、 等(以及所有特殊字符,并在"删除不需要的字符"部分中选中相应的框。您可以通过在删除原始字符串中不需要的部分后执行此操作来加快速度。但是,这将删除未封装在空格中的通缉连字符,因此...
- 您可以使用已有的模式设置一个简单的公式工具表达式,以便使用 REGEX_Replace(( 函数匹配要替换的所有特殊字符。你也可以使用查找和替换工具,或者一堆嵌套的Replace((函数,但是,在这种情况下,REGEX_Replace((函数可能是最简洁和最容易理解的,假设任何必须维护工作流程的人都可以处理正则表达式。
如果你试图在Python SDK的上下文中做这些事情,那么我仍然建议将多个步骤分开,以便将来你和/或其他人使用。
像大多数事情一样,还有其他方法可以在 Alteryx 中和 Alteryx 之外解决这些问题,但这些是我根据您最初的问题处理的方法。