0 / 0
영어 버전 문서로 돌아가기

정규식을 사용하여 엔티티 발견

마지막 업데이트 날짜: 2024년 7월 23일
정규식을 사용하여 엔티티 발견

사전이 있는 엔티티를 발견하는 것과 유사하게, 정규식 패턴 일치를 사용하여 엔티티를 감지할 수 있습니다.

정규식은 사전과 같은 파일에는 제공되지 않지만 정규식 구성 내의 인메모리는 제공되지 않습니다. 동일한 추출 중에 여러 개의 정규식 구성을 사용할 수 있습니다.

Watson 자연어 처리로 정의한 정규식은 토큰 경계를 사용할 수 있습니다. 이렇게 하면 일반 표현식이 하나 이상의 토큰 내에서 일치하는지 확인할 수 있습니다. 이는 특히 중국어와 같은 공백으로 구분되지 않는 언어에 대해 작업할 때 보다 단순한 정규식 엔진에 대한 명백한 장점입니다.

정규식은 규칙 기반 런타임이라고 하는 전용 컴포넌트 또는 짧은 RBR에 의해 처리됩니다.

정규식 구성 작성

노트북 내부에 모듈 디렉토리를 작성하여 시작하십시오. 이는 RBR 훈련에 의해 작성된 파일을 저장하기 위해 임시로 사용되는 노트북 파일 시스템 내의 디렉토리입니다. 이 모듈 디렉토리는 사전 기반 엔티티 추출에 대해 작성하여 사용한 디렉토리와 동일할 수 있습니다. 사전 및 정규식은 동일한 훈련 실행에서 사용할 수 있습니다.

노트북에서 모듈 디렉토리를 작성하려면 코드 셀에 다음을 입력하십시오. 모듈 디렉토리에 대시(-)가 포함될 수 없습니다.

import os
import watson_nlp
module_folder = "NLP_RBR_Module_2"
os.makedirs(module_folder, exist_ok=True)

정규식 구성은 다음과 같은 속성을 가진 Python 사전입니다.

regex 구성에서 사용 가능한 속성과 해당 값, 사용에 대한 설명 및 필요 여부 표시
속성 설명 필수
name 문자열 정규식의 이름. 입력 텍스트에 있는 정규식의 일치는 출력에서 이 이름으로 태그 지정됩니다.
regexes 목록(perl 기반 정규식 패턴의 문자열) 비어 있지 않아야 합니다. 다수의 회귀가 제공될 수 있습니다.
flags 유효한 플래그의 구분된 문자열 UNICODE 또는 CASE_INSENSITIVE와 같은 플래그가 일치를 제어합니다. 깃발의 결합이 될 수도 있습니다. 지원되는 플래그는 패턴(Java Platform SE 8)을 참조하십시오. 아니오(기본값은 DOTALL)
token_boundary.min int token_boundary은(는) 토큰 경계에서만 정규식 일치 여부를 확인할지 표시합니다. minmax 속성이 있는 dict 오브젝트로 지정됩니다. 아니오(입력 텍스트의 각 문자 위치에서 가장 긴 겹치지 않는 일치를 리턴함)
token_boundary.max int maxtoken_boundary 의 선택적 속성이며 경계가 범위 ( minmax 토큰 사이) 에 대해 확장해야 하는 경우에 필요합니다. token_boundary.max>= token_boundary.min 이어야 합니다. 아니오(token_boundary이(가) 지정된 경우 min 속성을 단독으로 지정할 수 있음)
groups 목록(일치하는 그룹의 문자열 레이블) 목록의 문자열 인덱스는 0인덱스가 전체 일치에 해당하는 1로 시작하는 패턴의 일치된 그룹에 해당합니다. 예: abregex: (a)(b)과(와) group: ['full', 'first', 'second']은(는) full: ab, first: a, second: b을(를) 생성합니다. 아니오(기본값은 전체 일치의 레이블 일치)

다음 헬퍼 메소드를 사용하여 정규식 구성을 로드할 수 있습니다.

  • 단일 정규식 구성을 로드하려면 watson_nlp.toolkit.RegexConfig.load(<regex configuration>)을(를) 사용하십시오.
  • 다중 정규식 구성을 로드하려면 watson_nlp.toolkit.RegexConfig.load_all([<regex configuration>)])을(를) 사용하십시오.

코드 샘플

이 샘플은 두 개의 서로 다른 정규식 구성을 로드하는 방법을 보여줍니다. 첫 번째 구성은 사용자 이름을 발견합니다. 그룹 속성을 사용하여 나중 단계에서 전체, 이름 및 성에 쉽게 액세스할 수 있습니다.

두 번째 구성에서는 모든 대문자의 시퀀스로 두문자어를 발견합니다. 이는 token_boundary 속성을 사용하여 대문자와 소문자를 모두 포함하는 단어의 일치를 방지합니다.

from watson_nlp.toolkit.rule_utils import RegexConfig

# Load some regex configs, for instance to match First names or acronyms
regexes = RegexConfig.load_all([
    {
        'name': 'full names',
        'regexes': ['([A-Z][a-z]*) ([A-Z][a-z]*)'],
        'groups': ['full name', 'first name', 'last name']
    },
    {
        'name': 'acronyms',
        'regexes': ['([A-Z]+)'],
        'groups': ['acronym'],
        'token_boundary': {
            'min': 1,
            'max': 1
        }
    }
])

정규 표현식을 포함하는 모델을 훈련합니다.

정규식 구성을 로드한 후 RBR.train() 메소드를 사용하여 RBR 모델을 작성하십시오. 메소드에서 다음을 지정합니다.

  • 모듈 디렉토리
  • 텍스트의 언어
  • 사용할 정규식 구성

이는 사전 기반 추출로 RBR을 훈련하는 데 사용되는 것과 동일한 방법입니다. 동일한 메소드 호출에서 사전 구성을 전달할 수 있습니다.

코드 샘플

# Train the RBR model
custom_regex_block = watson_nlp.resources.feature_extractor.RBR.train(module_path=module_folder, language='en', regexes=regexes)

새 데이터에 모델 적용

사전을 교육한 후 기존의 선행 학습된 블록에서 사용하는 것처럼 run() 메소드를 사용하여 새 데이터에 모델을 적용하십시오.

코드 샘플

custom_regex_block.run('Bruce Wayne works for NASA')

코드 샘플의 출력:

{(0, 11): ['regex::full names'], (0, 5): ['regex::full names'], (6, 11): ['regex::full names'], (22, 26): ['regex::acronyms']}

일치하는 하위 그룹 또는 일치하는 텍스트를 표시하려면:

import json
# Get the raw response including matching groups
full_regex_result = custom_regex_block.executor.get_raw_response('Bruce Wayne works for NASA‘, language='en')
print(json.dumps(full_regex_result, indent=2))

코드 샘플의 출력:

{
  "annotations": {
    "View_full names": [
      {
        "label": "regex::full names",
        "fullname": {
          "location": {
            "begin": 0,
            "end": 11
          },
          "text": "Bruce Wayne"
        },
        "firstname": {
          "location": {
            "begin": 0,
            "end": 5
          },
          "text": "Bruce"
        },
        "lastname": {
          "location": {
            "begin": 6,
            "end": 11
          },
          "text": "Wayne"
        }
      }
    ],
    "View_acronyms": [
      {
        "label": "regex::acronyms",
        "acronym": {
          "location": {
            "begin": 22,
            "end": 26
          },
          "text": "NASA"
        }
      }
    ]
  },
...
}

상위 주제: 자신의 모델 만들기