Вы можете создать подкласс PunktLanguageVars
и адаптировать атрибут sent_end_chars
, чтобы соответствовать вашим потребностям, как так:
from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktLanguageVars
class BulletPointLangVars(PunktLanguageVars):
sent_end_chars = ('.', '?', '!', '•')
tokenizer = PunktSentenceTokenizer(lang_vars = BulletPointLangVars())
tokenizer.tokenize(u"• I am a sentence • I am another sentence")
Это приведет к следующему выходу:
['•', 'I am a sentence •', 'I am another sentence']
Однако это делает предложение end, тогда как в вашем случае это скорее маркер начала предложения. Таким образом, в этом примере текст:
Представляю список предложений.
- Я приговорить один
- Я приговорить два
И я один, тоже!
Would, в зависимости от деталей текста, в результате чего-то вроде следующего:
>>> tokenizer.tokenize("""
Look at these sentences:
• I am sentence one
• I am sentence two
But I am one, too!
""")
['\nLook at these sentences:\n\n•', 'I am sentence one\n•', 'I am sentence two\n\nBut I am one, too!\n']
Одна из причин, почему PunktSentenceTokenizer
используется для предложения токенизации вместо того, чтобы просто используя что-то вроде мульти-разделителем разделить функция, потому что она способна научиться различать пунктуацию, используемую для предложений и пунктуации, используемую для других целей, например, например, в «Г-н».
Не должно быть таких осложнений для •, поэтому я бы посоветовал вам написать простой синтаксический анализатор для предварительной обработки форматирования маркеров, вместо того чтобы злоупотреблять PunktSentenceTokenizer
тем, для чего он не предназначен. Как это может быть достигнуто в деталях, зависит от того, как именно этот вид разметки используется в тексте.