Я хочу включить дефисные слова, например: долгосрочные, самооценка и т. Д., В качестве одного токена в Spacy.Посмотрев несколько похожих постов в Stackoverflow, Github , его документации и в других местах , я также написал собственный токенизатор, как показано ниже.
import re
from spacy.tokenizer import Tokenizer
prefix_re = re.compile(r'''^[\[\("']''')
suffix_re = re.compile(r'''[\]\)"']$''')
infix_re = re.compile(r'''[.\,\?\:\;\...\‘\’\`\“\”\"\'~]''')
def custom_tokenizer(nlp):
return Tokenizer(nlp.vocab, prefix_search=prefix_re.search,
suffix_search=suffix_re.search,
infix_finditer=infix_re.finditer,
token_match=None)
nlp = spacy.load('en_core_web_lg')
nlp.tokenizer = custom_tokenizer(nlp)
doc = nlp(u'Note: Since the fourteenth century the practice of “medicine” has become a profession; and more importantly, it\'s a male-dominated profession.')
[token.text for token in doc]
Итак, для этого предложения: «Примечание: с четырнадцатого века практика« медицины »стала профессией;и что еще более важно, это профессия, в которой доминируют мужчины.
Теперь токены после включения пользовательского Spacy Tokenizer:
'Примечание', ':',' С ',' the ',' четырнадцатый ',' столетие ',' the ',' практика ',' of ', ' 'медицина', ' ”', «имеет», «;», «стать», «а», «профессия», «,», «и», «еще», «важно», «,», «это», 'a', ' с преобладанием мужчин ', 'профессия', '.'
Ранее токены до этого изменения были:
'Примечание', ':', 'С', 'the', 'четырнадцатый', 'столетие', 'the', 'практика', 'of', ' “', ' медицина ',' ” ',' имеет ',' стал ',' a ',' профессией ','; ',' и ',' more ',' важно ',', ',' it ', "' s ", 'a', ' male ', ' - ', ' преобладают ',' профессия ','. '
И ожидаемые токены должны быть:
' Примечание ',': ','С тех пор как «,», «четырнадцатый», «век», «,» практикаice ',' of ',' “ ',' Medicine ',' ” ',' has ',' становиться ',' a ','профессия ','; ',' и ',' more ',' важно ',', ',' it ', "' s ", 'a', ' с преобладанием мужчин ',' профессия ','. '
Как видно, слово дефис включено, как и другие знаки препинания, за исключением двойных кавычек и апострофов.Но теперь апостроф и двойные кавычки не имеют более раннего или ожидаемого поведения.Я пробовал разные перестановки и комбинации для регулярных выражений компиляции для Infix, но не смог решить эту проблему.Следовательно, любая помощь будет высоко ценится.