Ошибка фрагментации NLTK

Я пытаюсь реализовать разделитель предложений на основе классификатора Maxent, как описано в книге NLTK (пример 7.9):

http://nltk.googlecode.com/svn/trunk/doc/book/ch07.html#code-classifier-chunker

Когда я пытаюсь оценить чанкер с помощью

chunker = ConsecutiveNPChunker(train_sents)
print chunker.evaluate(test_sents)

или разделить предложение с

print chunker.parse(test_sents[1])

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "<pyshell#13>", line 1, in <module>
    print chunker.parse(test_sents[1])
  File "/usr/local/lib/python2.6/dist-packages/nltk/chunk/api.py", line 34, in parse
    assert 0, "ChunkParserI is an abstract interface"
AssertionError: ChunkParserI is an abstract interface

В гугле ничего не нашел и застрял на этом. Любая помощь будет действительно полезной!


person Vasilis    schedule 08.04.2012    source источник


Ответы (1)


Вы, очевидно, еще не реализовали свой чанкер. «ChunkParserI — это абстрактный интерфейс» означает, что вам нужно вывести из него класс и определить свой собственный метод parse(). В главе NLTK, на которую вы ссылаетесь, показано, как определить пример класса ConsecutiveNPChunker.

Последним шагом будет создание экземпляра вашего нового класса и вызов его метода eval() (который он наследует от ChunkParserI, поэтому вам не нужно предоставлять замену).

person alexis    schedule 08.04.2012
comment
Спасибо Алексис. На самом деле я создаю свой класс следующим образом: chunker = ConsecutiveNPChunker(train_sents) Я отредактировал исходный вопрос, чтобы сделать его более ясным. - person Vasilis; 09.04.2012
comment
Но вы не разъясняете, как определяется ConsecutiveNPChunker. Очевидно, что он не предоставляет метод parse. - person alexis; 09.04.2012
comment
Извините, что не добавил определение ConsecutiveNPChunker, я не добавлял его, потому что оно слишком длинное. Но ссылка, которую я предоставляю, имеет точный класс, который включает метод parse(). - person Vasilis; 09.04.2012
comment
Пример в книге NLTK добавляет метод parse, и он работает. Вы этого не сделаете, поэтому вы получите parse от chunk/api.py, единственной задачей которого является вызвать ошибку. Возможно, у вас есть ошибка отступа в вашем коде? - person alexis; 09.04.2012
comment
Спасибо! Отступ был неправильным, поэтому, как вы сказали, вместо этого вызывался метод parse() из chunk/api.py из ConsecutiveNPChunker... - person Vasilis; 09.04.2012
comment
Рад слышать. Просто для ясности: из-за вашей ошибки отступа ConsecutiveNPChunker НЕ ИМЕЕТ метода parse, поэтому был вызван метод родительского класса. - person alexis; 09.04.2012
comment
@vasilis, не могли бы вы опубликовать полный код, который вы использовали, чтобы заставить это работать? У меня похожая ошибка, и я не понимаю, как исправить. - person user3314418; 06.08.2014
comment
@user, исправьте свой отступ или напишите метод parse(), в зависимости от того, что может быть. - person alexis; 08.08.2014