2017-12-04 1 views
1

SpaCy 문서 및 샘플은 PhraseMatcher 클래스가 문서의 토큰 시퀀스를 일치시키는 데 유용함을 보여줍니다. 일치시킬 시퀀스의 어휘를 제공해야합니다.SpaCy의 PhraseMatcher를 사용하여 여러 일치 유형 찾기

내 응용 프로그램에는 토큰 및 구문 모음 인 문서가 있습니다. 다른 유형의 엔티티가 있습니다. 데이터는 원격으로 자연어입니다 (문서는 오히려 세미 임의 순서의 키워드 집합입니다). 여러 유형의 일치 항목을 찾으려고합니다.

yellow boots for kids 

가 어떻게 제품 유형 (예를 들어, 부츠)에 대한 색상 (예를 들어 노란색)에 대한 일치하는 항목을 찾을 수 있습니다 및 적응의 PhraseMatches를 사용하여 연령 (예를 들어, 어린 이용)에 대한 예를 들면 다음과 같습니다

? 좋은 유스 케이스인가요? 다른 엔티티가 오버랩과 일치하면 (예 : 색상이 색상 목록 및 재료 목록에서 일치 함) 모든 고유 사례를 생성 할 수 있습니까?

데이터가 느슨하게 구조화되어 모호성으로 가득차 있기 때문에 실제로 시퀀스 타거를 사용할 수 없습니다. 엔티티 목록 (예 : 색상, 연령, 제품 유형) 및 관련 가치 목록이 있습니다.

하나의 아이디어는 각 엔티티마다 하나씩 여러 개의 PhraseMatcher 개체를 인스턴스화하고 개별적으로 일치 작업을 수행 한 다음 결과를 병합하는 것입니다. 각 엔티티 유형은 고유 한 어휘를 갖게됩니다. 이것은 간단하지만 효율적인 것은 아니며, 특히 병합 부분입니다. 값 목록은 상당히 큽니다. 이 경로를 가기 전에, 이것이 좋은 생각인지 또는 SpaCy를 사용하여 더 간단한 방법이 있는지 알고 싶습니다.

답변

2

spaCy의 PhraseMatcher은 여러 패턴을 포함하는 여러 규칙을 추가하고 추가하는 각 정규식 규칙에 ID를 할당 할 수 있습니다. 두 규칙이 겹치면 두 일치 항목이 모두 반환됩니다. 그래서 이런 식으로 뭔가 할 수있는 : 당신이 당신의 docmatcher를 호출 할 때

color_patterns = [nlp(text) for text in ('red', 'green', 'yellow')] 
product_patterns = [nlp(text) for text in ('boots', 'coats', 'bag')] 
material_patterns = [nlp(text) for text in ('silk', 'yellow fabric')] 

matcher = PhraseMatcher(nlp.vocab) 
matcher.add('COLOR', None, *color_patterns) 
matcher.add('PRODUCT', None, *product_patterns) 
matcher.add('MATERIAL', None, *material_patterns) 

을, 적응은 (match_id, start, end) 튜플의 목록을 반환합니다. 적응 저장하기 때문에 정수로 모든 문자열은 다시 얻을 match_id도 정수가됩니다 -하지만 당신은 항상 즉 nlp.vocab.strings, 어휘의 StringStore에서 그것을보고 문자열 표현을 얻을 수 있습니다 :

doc = nlp("yellow fabric") 
matches = matcher(doc) 
for match_id, start, end in matches: 
    rule_id = nlp.vocab.strings[match_id] # get the unicode ID, i.e. 'COLOR' 
    span = doc[start : end] # get the matched slice of the doc 
    print(rule_id, span.text) 

# COLOR yellow 
# MATERIAL yellow fabric 

를 추가 할 때 정규 표현식 규칙의 경우 on_match callback functionMatcher.add의 두 번째 인수로 정의 할 수도 있습니다. 이는 특정 작업을 실행하려는 경우에 유용합니다 (예 : COLOR 일치 항목이있는 경우 한 가지 작업 만 수행하고 PRODUCT 일치 항목 일 경우).

이 문제를 더욱 세련되게 해결하려면 custom pipeline component 또는 custom attributes으로 정규 표현식을 결합하는 것이 좋습니다. 예를 들어, 텍스트에 nlp() 전화를 걸 때 일치하는 항목을 찾고 Doc._.contains_product 또는 Token._.is_color 속성을 설정하면 자동으로 실행되는 간단한 구성 요소를 작성할 수 있습니다. 문서에는 시작하는 데 도움이되는 몇 가지 예가 있습니다.

+0

대단하다! 내 질문에 답한 다음 몇 가지를 답하십시오! –