청킹 및 정보 추출
청킹이란 무엇입니까?
자연어 처리에서 중요한 프로세스 중 하나 인 청킹은 품사 (POS)와 짧은 구를 식별하는 데 사용됩니다. 즉, 청킹을 사용하면 문장의 구조를 얻을 수 있습니다. 그것은 또한 불린다partial parsing.
청크 패턴과 턱
Chunk patterns덩어리를 구성하는 단어의 종류를 정의하는 품사 (POS) 태그의 패턴입니다. 수정 된 정규식의 도움으로 청크 패턴을 정의 할 수 있습니다.
더욱이, 우리는 어떤 종류의 단어가 청크에 포함되어서는 안되는 패턴을 정의 할 수 있으며 이러한 단절되지 않은 단어는 chinks.
구현 예
아래 예에서 문장을 구문 분석 한 결과와 함께 “the book has many chapters”, 청크와 칙칙 패턴을 결합한 명사구에 대한 문법이 있습니다.
import nltk
sentence = [
("the", "DT"),
("book", "NN"),
("has","VBZ"),
("many","JJ"),
("chapters","NNS")
]
chunker = nltk.RegexpParser(
r'''
NP:{<DT><NN.*><.*>*<NN.*>}
}<VB.*>{
'''
)
chunker.parse(sentence)
Output = chunker.parse(sentence)
Output.draw()
산출
위에서 볼 수 있듯이 청크를 지정하는 패턴은 다음과 같이 중괄호를 사용하는 것입니다.
{<DT><NN>}
그리고 chink를 지정하기 위해 다음과 같이 중괄호를 뒤집을 수 있습니다.
}<VB>{.
이제 특정 구문 유형에 대해 이러한 규칙을 문법으로 결합 할 수 있습니다.
정보 추출
우리는 정보 추출 엔진을 구축하는 데 사용할 수있는 파서뿐만 아니라 태거도 살펴 보았습니다. 기본 정보 추출 파이프 라인을 살펴 보겠습니다.
정보 추출에는 다음과 같은 많은 응용 프로그램이 있습니다.
- 비즈니스 인텔리전스
- 수확 재개
- 미디어 분석
- 감정 감지
- 특허 검색
- 이메일 검사
명명 된 엔티티 인식 (NER)
이름이 지정된 엔티티 인식 (NER)은 실제로 이름, 조직, 위치 등과 같은 가장 일반적인 엔티티 중 일부를 추출하는 방법입니다. 문장 토큰 화, POS 태깅, 청킹, NER, 위 그림에 제공된 파이프 라인을 따릅니다.
예
Import nltk
file = open (
# provide here the absolute path for the file of text for which we want NER
)
data_text = file.read()
sentences = nltk.sent_tokenize(data_text)
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
for sent in tagged_sentences:
print nltk.ne_chunk(sent)
수정 된 명명 된 개체 인식 (NER) 중 일부는 제품 이름, 생물 의학 개체, 브랜드 이름 등과 같은 개체를 추출하는데도 사용할 수 있습니다.
관계 추출
일반적으로 사용되는 또 다른 정보 추출 작업 인 관계 추출은 다양한 엔티티 간의 서로 다른 관계를 추출하는 프로세스입니다. 상속, 동의어, 유사 등과 같은 다른 관계가있을 수 있으며 정의는 정보 요구에 따라 달라집니다. 예를 들어, 책의 쓰기를 찾고 싶다면 저자는 저자 이름과 책 이름 사이의 관계가 될 것입니다.
예
다음 예제에서는 위의 다이어그램에 표시된 것과 같이 NER (Named-entity relation)까지 사용한 것과 동일한 IE 파이프 라인을 사용하고 NER 태그를 기반으로하는 관계 패턴으로 확장합니다.
import nltk
import re
IN = re.compile(r'.*\bin\b(?!\b.+ing)')
for doc in nltk.corpus.ieer.parsed_docs('NYT_19980315'):
for rel in nltk.sem.extract_rels('ORG', 'LOC', doc, corpus = 'ieer',
pattern = IN):
print(nltk.sem.rtuple(rel))
산출
[ORG: 'WHYY'] 'in' [LOC: 'Philadelphia']
[ORG: 'McGlashan & Sarrail'] 'firm in' [LOC: 'San Mateo']
[ORG: 'Freedom Forum'] 'in' [LOC: 'Arlington']
[ORG: 'Brookings Institution'] ', the research group in' [LOC: 'Washington']
[ORG: 'Idealab'] ', a self-described business incubator based in' [LOC: 'Los Angeles']
[ORG: 'Open Text'] ', based in' [LOC: 'Waterloo']
[ORG: 'WGBH'] 'in' [LOC: 'Boston']
[ORG: 'Bastille Opera'] 'in' [LOC: 'Paris']
[ORG: 'Omnicom'] 'in' [LOC: 'New York']
[ORG: 'DDB Needham'] 'in' [LOC: 'New York']
[ORG: 'Kaplan Thaler Group'] 'in' [LOC: 'New York']
[ORG: 'BBDO South'] 'in' [LOC: 'Atlanta']
[ORG: 'Georgia-Pacific'] 'in' [LOC: 'Atlanta']
위의 코드에서 우리는 ieer라는 이름의 붙박이 말뭉치를 사용했습니다. 이 말뭉치에서 문장은 NER (Named-entity relation)까지 태그가 지정됩니다. 여기서는 우리가 원하는 관계 패턴과 관계가 정의 할 NER의 종류 만 지정하면됩니다. 이 예에서는 조직과 위치 간의 관계를 정의했습니다. 이러한 패턴의 모든 조합을 추출했습니다.