0
select 'Owens 1245 Coning COM CO LTD INC CORP INC', REGEXP_REPLACE(
      UPPER(TRIM(REGEXP_REPLACE(TRIM(REGEXP_REPLACE(regexp_replace('Owens 1245 Coning COM CO LTD', '(*[[:punct:]])', ' '),'(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)',' ')),'( ){2,}', ' '))), 
      '\\b'||'CO|LTD|INC|CORP'||'\\W'
      ,'') CLEARTEXT
from dual;  

如果我运行上面的查询,它会删除除“CO”之外的所有停用词并给出输出:OWENS CONING COM CO

但是我需要输出像:OWENS CONING COM

4

2 回答 2

0

试试这个,但一定要测试列中可能存在的“停用词”和“好”数据的每种组合。此正则表达式查找您的“停用词”,后跟空格或行尾(空格已被占用)并替换为空。我添加了括号以显示在最终的 TRIM( )) 之后没有空格:

SQL> with tbl(str) as (
     select 'Owens 1245 Coning COM CO LTD. INC CORP. INC' from dual
   )
   select str original, '[' || trim(regexp_replace(upper(str), '(\d+|CO|LTD|INC|CORP)([[:punct:]])?( |$)', '')) || ']' CLEARTEXT
   from tbl;

ORIGINAL
-----------------------------------------
CLEARTEXT
--------------------------------------------------------------------------------
Owens 1245 Coning COM CO LTD. INC CORP. INC
[OWENS CONING COM]


SQL>

编辑:修改正则表达式以允许在停用词后使用可选的标点符号。

于 2015-11-10T19:55:46.810 回答
0
with t as 
(
select '121 R.S. Hughes3 Company, Inc.' SUPPLIER_NAME from dual
)
select a.SUPPLIER_NAME , REGEXP_REPLACE(
      REGEXP_REPLACE(UPPER(TRIM(REGEXP_REPLACE(TRIM(REGEXP_REPLACE(regexp_replace(a.SUPPLIER_NAME , '(*[[:punct:]])', ' '),'(\s[0-9]+\s)|(^[0-9]+\s)|(\s[0-9]+$)',' ')),'( ){2,}', ' '))), ''),
  '(CO|LTD|INC|CORP)?( |$)'
  ,' ') CLEARTEXT
from t a
;

感谢 Gary 尝试更改原始查询,其中我只添加了您提供的停用词查询,这给了我所需的输出。

再次感谢。

于 2015-11-12T10:31:09.853 回答