1

我目前正在尝试对公司名称进行一些自然语言处理。

我写的正则表达式 -\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 保持不变。

4

1 回答 1

0

我猜你已经过了迫切需要回应的问题,但想为后代回答。

首先,关于您是否将每个正则表达式步骤分开或尝试将它们组合成一个单独的、令人印象深刻的长、无法理解的表达式,这确实是一个风格问题。(您未来的自己和/或其他人可能会感谢您将它们分开。)在某些情况下减少正则表达式操作有一些性能考虑,但总的来说,我会说最好能够回来制作了解您在一年或更长时间后尝试做的事情,而不是节省几个周期。

其次,正则表达式当然有它的用途,但我总是在实际使用它之前问自己是否有任何方法可以避免使用正则表达式。现在你有两个问题...

最后,考虑到这一点,您可以在 Alteryx 中解决大多数这些解析步骤,而无需使用 Regex 并具有类似的性能。

  1. 可以使用模式“-”(空格 + 连字符)使用文本到列工具来完成连字符后跟空格的删除,然后仅使用从工作流的其余部分产生的第一列(或使用a 选择工具以完全删除垃圾列)。
  2. 您可以使用数据清理工具删除所有空格(包括 \r、\n 等)以及所有特殊字符,并在删除不需要的字符部分选中相应的框。在删除原始字符串中不需要的部分后,您可以加快速度。但是,这将删除未封装在空格中的所需连字符,所以......
  3. 您可以使用已有的模式设置一个简单的公式工具表达式,以匹配您想要使用 REGEX_Replace() 函数替换的所有特殊字符。您还可以使用查找和替换工具,或一堆嵌套的 Replace() 函数,但在这种情况下,REGEX_Replace() 函数可能是最简洁且易于理解的,假设任何人都必须维护工作流程将能够处理正则表达式。

如果您尝试在 Python SDK 的上下文中执行这些操作,那么我仍然建议您将多个步骤分开,以供您和/或其他人使用。

像大多数事情一样,在 Alteryx 和 Alteryx 之外还有其他方法可以解决这些问题,但这些是我根据您最初的问题解决的方法。

于 2018-01-29T23:09:38.553 回答