Тест-кейс:
from razdel import tokenize
print([_.text for _ in tokenize(`:-)`)])
# [`:`, `-`, `)`]
- В регулярке
ATOM каждый символ пунктуации рассматривается как отдельный атом, то есть слияние ожидается от процедуры сегментации
- В процедуре
punct судя по всему только содержимое двух атомов приходит, :-, -). Видимо, раньше здесь какое-то другое правило склеивало :- в один буффер, а punct проверяло завершающую скобочку ).
# SMILE = re.compile(r'^' + r'[=:;]-?[)(]{1,3}' + '$', re.U)
if SMILE.match(tok.buffer + right):
return JOIN
Предлагаемый патч, проверяем третий токен
def punct(split):
if split.left_1.type != PUNCT or split.right_1.type != PUNCT:
return
left = split.left
right = split.right
+ if split.right_2 and SMILE.match(split.buffer + right + split.right_2.text):
+ return JOIN
if SMILE.match(split.buffer + right):
return JOIN
if left in ENDINGS and right in ENDINGS:
# ... ?!
return JOIN
if left + right in ('--', '**'):
# ***
return JOIN
Тест-кейс:
ATOMкаждый символ пунктуации рассматривается как отдельный атом, то есть слияние ожидается от процедуры сегментацииpunctсудя по всему только содержимое двух атомов приходит,:-,-). Видимо, раньше здесь какое-то другое правило склеивало:-в один буффер, аpunctпроверяло завершающую скобочку).Предлагаемый патч, проверяем третий токен
def punct(split): if split.left_1.type != PUNCT or split.right_1.type != PUNCT: return left = split.left right = split.right + if split.right_2 and SMILE.match(split.buffer + right + split.right_2.text): + return JOIN if SMILE.match(split.buffer + right): return JOIN if left in ENDINGS and right in ENDINGS: # ... ?! return JOIN if left + right in ('--', '**'): # *** return JOIN