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
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
;

ありがとう ゲイリー 元のクエリを変更しようとしましたが、あなたが提供したストップワードクエリのみを追加したところ、目的の出力が得られました。

再度、感謝します。

于 2015-11-12T10:31:09.853 に答える
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 に答える