2017-11-15 2 views
1

안녕하세요! spacy 2.02를 사용하여 일부 토큰을 토큰 화하는 데 예외를 추가하려고합니다. .tokenizer.add_special_case() 일부 경우에는 사용하지만 예를 들어 US $ 100과 같은 토큰, 두 토큰에서 spacy가 사용되는 경우Spacy tokenizer, 토크 나이저 예외 추가

('US $', 'SYM'), ('100', 'NUM')

하지만 대신 각 숫자 이후에 대한 특별한 경우를 일의이 같은 세 가지로 분할 할 US $, 저는 US $ NUMBER의 형식이있는 모든 토큰에 대해 excition을 만들고 싶습니다.

('미국', 'PROPN'), ('$', 'SYM'), ('800', 'NUM')

나는이 문서에 TOKENIZER_EXCEPTIONS에 대해 읽고 있었다 spacy의 그러나 나는 이것을 어떻게 이해할 수 없다. spacy.lang.en.tokenizer_exceptions가 TOKENIZER_EXCEPTIONS 을 가져오고 메소드 update_exc이있는 또한 spacy.util()에서

나는

를 사용하려고했다.

누군가 어떻게 전체 코드 예제를 게시 할 수 있습니까?

다른 점은 lang.en의 tokenizer_exceptions 파일에 이미 "i"가 "i"인 스플릿과 같은 예외가 있음을 알고 있습니다. 이미 그 부분에 댓글을 달았지만 그렇지 않습니다. 작업. 토큰 라이저가 "나"라고 나눈 것을 원하지 않습니다. 어떻게 할 수 있습니까?

감사

답변

0

이 솔루션은 here

def custom_en_tokenizer(en_vocab): 
prefixes = list(English.Defaults.prefixes) 
prefixes.remove('US\$') # Remove exception for currencies 
prefixes.append(r'(?:US)(?=\$\d+)') # Append new prefix-matching rule 

prefix_re = util.compile_prefix_regex(tuple(prefixes)) 
suffix_re = util.compile_suffix_regex(English.Defaults.suffixes) 
infix_re = util.compile_infix_regex(English.Defaults.infixes) 

return Tokenizer(en_vocab, 
        English.Defaults.tokenizer_exceptions, 
        prefix_re.search, 
        suffix_re.search, 
        infix_re.finditer, 
        token_match=None) 

> tokenizer = custom_en_tokenizer(spacy.blank('en').vocab) 
> for token in tokenizer('US$100'): 
>  print(token, end=' ') 
입니다
관련 문제