NLTK PunktSentenceTokenizer - Как разделить нумерованные списки?

Я пытаюсь разобрать предложения из многих документов, используя NLTK.

Все работает по большей части, но я хотел бы иметь возможность более точно разделить нумерованные списки. Это пример того, что я получаю:

Transfer of personal data   3.
Personal Data may be disclosed by the SFC...
The names of persons who submit comments...
This will be done by publishing this...
Access to data   4.
You have the right to request access to and correction of your Personal Data in accordance with the provisions of the PDPO.
Retention   5.
Personal Data provided to...
1  Personal Data means personal data as defined in the Personal Data (Privacy) Ordinance (Cap. 486).
2  The term “relevant provisions” is defined...
3 Enquiries  6.

Вы можете видеть, что многие предложения идут с номером списка / маркера в конце предложения, когда оно должно быть в начале следующего предложения.

Ниже мой код

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys
from nltk import sent_tokenize
import pickle
import codecs

### TRAINING
text =  codecs.open("corpus/en1.txt","r","utf8").read()

from pprint import pprint
from nltk.tokenize.punkt import PunktSentenceTokenizer, PunktTrainer, PunktLanguageVars, PunktParameters

trainer = PunktTrainer()
trainer.INCLUDE_ALL_COLLOCS = True
trainer.INCLUDE_ABBREV_COLLOCS = True
trainer.train(text) 
tokenizer = PunktSentenceTokenizer(trainer.get_params())

### ADD BEGINNING OF SENTENCE
tokenizer._params.sent_starters.add('1.')
tokenizer._params.sent_starters.add('2.')
tokenizer._params.sent_starters.add('3.')
...

tokenizer.tokenize(some long text)

Я даже попробовал случайное ключевое слово, но не увидел, что новое предложение анализируется, например, ключевое слово - это "информация" ниже, которое принадлежит моему длинному тексту.

tokenizer._params.sent_starters.add('information'.decode("utf-8"))

0 ответов

Другие вопросы по тегам