2017-04-13 11 views
0

텍스트에서 의미 토큰으로 레이블을 추가하는 데 파이썬 라이브러리 spacy를 사용하고 싶습니다. 그런 다음 일치 항목을 사용하여 토큰 간의 관계를 추출합니다. 처음에는 matcher.addmatcher.add_pattern의 spacy를 사용했습니다. 지금까지, 내 ​​코드를 matcher.add 잘 작동하고 나는 토큰을 찾을 수 있습니다이 잘 작동하고 꽤 좋은 결과를 출력spacy가있는 엔티티의 규칙 기반 일치 자

import spacy 


nlp = spacy.load('en') 

def merge_phrases(matcher, doc, i, matches): 
    if i != len(matches)-1: 
     return None 
    spans = [(ent_id, label, doc[start : end]) for ent_id, label, start, end in matches] 
    for ent_id, label, span in spans: 
     span.merge('NNP' if label else span.root.tag_, span.text, nlp.vocab.strings[label]) 



matcher = spacy.matcher.Matcher(nlp.vocab) 



matcher.add(entity_key='1', label='FINANCE', attrs={}, specs=[[{spacy.attrs.ORTH: 'financial'}, {spacy.attrs.ORTH: 'instrument'}]], on_match=merge_phrases) 
matcher.add(entity_key='2', label='BUYER', attrs={}, specs=[[{spacy.attrs.ORTH: 'acquirer'}]], on_match=merge_phrases) 
matcher.add(entity_key='3', label='CODE', attrs={}, specs=[[{spacy.attrs.ORTH: 'Code'}]], on_match=merge_phrases) 

:

내 질문은
doc = nlp(u'Code used to identify the acquirer of the financial instrument.') 

# Output 
['Code|CODE', 'used|', 'to|', 'identify|', 'the|', 'acquirer|BUYER', 'of|', 'the|', 'financial instrument|FINANCE', '.|'] 

, 어떻게이 matcher.add_patern을 사용할 수 있습니다 의 출력

matcher.add_pattern("IS_OF", [{BUYER}, {'of'}, {FINANCE}]) 

같은 토큰 사이의 관계에 맞게 뭔가 :

나는이 방법을 사용하기 위해 여러 가지 방법을 시도했지만, 분명히 그렇지 않다. 내 이해가 잘못된 것 같아 matcher.add_pattern.

  1. spacy로 수행하는 방법을 올바른 방향으로 넣을 수 있습니까?
  2. 패턴을 찾으려면 여기에 정규식을 추가 할 수 있습니까?
  3. 같은 레이블을 가진 토큰을 두 개 이상 추가하거나 어떻게해도 같은 레이블의 토큰 목록을 만들 수 있습니다 (예 : ). "재원"?

모든 의견을 부탁드립니다.

답변

1

당신의 일치하는 사람은 토큰을 식별 할 것이지만 그것들 사이의 관계를 찾으려면 의존성 분석을해야 할 것입니다. 여기 는 visual example from spacy입니다 : 당신은 다음 토큰 사이의 관계를 찾을 수있는 트리를 통과 할 수

enter image description here

. 각 토큰의 https://spacy.io/docs/usage/dependency-parse#navigating

출발 (ENUM)와 dep_ (자세한 이름) 속성이 자녀와 함께 당신에게 당신의 답변을

+0

덕분 관계를 줄 것, 그것은 많은 도움이됩니다. 내 소스에서 새로운 관련 엔티티를 찾고 엔티티 간의 관계를 찾기 위해 명명 된 엔티티 모델을 교육하는 것이 더 편리 할 지 궁금합니다. NLTK를 사용하는 것에 대한 몇 가지 문서가 있지만, spacy로 어떻게 접근 할 것인가? 관계 추출 부분을 의미합니까? –

+0

의존성 구문 분석에 예제를 제공 할 수 있습니까? spacy-matcher와 호환 될 수 있습니까? 아니면 여기서 잘못된 생각을하고 있습니까? –

+0

@ El_Patrón 답안에서 제공하는 링크에는 예제가 있습니다. 예, spacy-mathcher와 호환 될 수 있습니다. 종속성 구문 분석 결과는 spacy 토큰 자체의 속성이며 dep 및 dep_로 나타납니다. – DhruvPathak