텍스트에서 의미 토큰으로 레이블을 추가하는 데 파이썬 라이브러리 spacy를 사용하고 싶습니다. 그런 다음 일치 항목을 사용하여 토큰 간의 관계를 추출합니다. 처음에는 matcher.add
및 matcher.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
.
- spacy로 수행하는 방법을 올바른 방향으로 넣을 수 있습니까?
- 패턴을 찾으려면 여기에 정규식을 추가 할 수 있습니까?
- 같은 레이블을 가진 토큰을 두 개 이상 추가하거나 어떻게해도 같은 레이블의 토큰 목록을 만들 수 있습니다 (예 : ). "재원"?
모든 의견을 부탁드립니다.
덕분 관계를 줄 것, 그것은 많은 도움이됩니다. 내 소스에서 새로운 관련 엔티티를 찾고 엔티티 간의 관계를 찾기 위해 명명 된 엔티티 모델을 교육하는 것이 더 편리 할 지 궁금합니다. NLTK를 사용하는 것에 대한 몇 가지 문서가 있지만, spacy로 어떻게 접근 할 것인가? 관계 추출 부분을 의미합니까? –
의존성 구문 분석에 예제를 제공 할 수 있습니까? spacy-matcher와 호환 될 수 있습니까? 아니면 여기서 잘못된 생각을하고 있습니까? –
@ El_Patrón 답안에서 제공하는 링크에는 예제가 있습니다. 예, spacy-mathcher와 호환 될 수 있습니다. 종속성 구문 분석 결과는 spacy 토큰 자체의 속성이며 dep 및 dep_로 나타납니다. – DhruvPathak