Я использую NLTK для анализа нескольких классических текстов, и я бегу, чтобы затруднить токенизацию текста по предложению. Например, вот что я получаю за фрагмент из Moby Dick:
import nltk
sent_tokenize = nltk.data.load('tokenizers/punkt/english.pickle')
'''
(Chapter 16)
A clam for supper? a cold clam; is THAT what you mean, Mrs. Hussey?" says I, "but
that a rather cold and clammy reception in the winter time, ain't it, Mrs. Hussey?"
'''
sample = 'A clam for supper? a cold clam; is THAT what you mean, Mrs. Hussey?" says I, "but that\ a rather cold and clammy reception in the winter time, ain\'t it, Mrs. Hussey?"'
print "\n-----\n".join(sent_tokenize.tokenize(sample))
'''
OUTPUT
"A clam for supper?
-----
a cold clam; is THAT what you mean, Mrs.
-----
Hussey?
-----
" says I, "but that\ a rather cold and clammy reception in the winter time, ain\'t it, Mrs.
-----
Hussey?
-----
"
'''
Я не ожидаю совершенства здесь, учитывая, что синтаксис Melville немного устарел, но NLTK должен иметь возможность обрабатывать двойные кавычки и названия, такие как "Mrs.", Однако, поскольку токенизатор является результатом неконтролируемого обучения, я не могу понять, как его использовать.
У кого-нибудь есть рекомендации по улучшению токенизатора предложения? Я предпочел бы просто эвристику, которую я могу взломать, вместо того, чтобы тренировать собственный парсер.