Переопределение CorpusView.read_block () не учитывается - PullRequest
1 голос
/ 13 мая 2019

Я хочу обработать несколько текстовых файлов, используя NLTK, разбивая их по определенному ключевому слову.Поэтому я пытаюсь " подкласс StreamBackedCorpusView и переопределить read_block() метод ", как это предлагается в документации .

class CustomCorpusView(StreamBackedCorpusView):

    def read_block(self, stream):
        block = stream.readline().split()
        print("wtf")
        return [] # obviously this is only for debugging

class CustomCorpusReader(PlaintextCorpusReader):
    CorpusView = CustomCorpusViewer

Однако мои знаниянаследство ржаво, и, кажется, мое переопределение не принимается во внимание.Вывод

corpus = CustomCorpusReader("/path/to/files/", ".*")

print(corpus.words())

идентичен выводу

corpus = PlaintextCorpusReader("/path/to/files", ".*")

print(corpus.words())

Полагаю, я упускаю что-то очевидное, но что?

1 Ответ

0 голосов
/ 14 мая 2019

Документация фактически предлагает два способа определения пользовательского представления корпуса:

  1. Вызовите конструктор StreamBackedCorpusView и предоставьте функцию чтения блока через аргумент block_reader.
  2. Подкласс StreamBackedCorpusView и переопределение метода read_block ().

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

from nltk.corpus import PlaintextCorpusReader
from nltk.corpus.reader.api import *

class CustomCorpusReader(PlaintextCorpusReader):

    def _custom_read_block(self, stream):
        block = stream.readline().split()
        print("wtf")
        return [] # obviously this is only for debugging

    def custom(self, fileids=None):
        return concat(
            [
                self.CorpusView(fileid, self._custom_read_block, encoding=enc)
                for (fileid, enc) in self.abspaths(fileids, True)
            ]
        )


corpus = CustomCorpusReader("/path/to/files/", ".*")

print(corpus.custom())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...