Объект 'str' не может быть вызван в NLTK

import re
import nltk
import pandas as pd
from nltk.chunk import RegexpParser
from textblob import TextBlob
data = open('data.txt', 'r')
data = data.read()

# region Fetch Account Type
chunkData = r"""DataChunk: {(<NNP><NNP>+<CD>+)}
  }<JJ|IN|DT|TO>+{"""



lines = [line for line in open('data.txt')]
lstLines=data.split('|')
dataLines=[]
for lines in lstLines:
    dataLines=lines.split("\n")

for line in dataLines:
    if 'Data' in line:
        DataTags = TextBlob(line).tags
        Datachunker = RegexpParser(chunkData)
        Datachunked = Datachunker.parse(DataTags)

        for chunk in Datachunked:

                if type(chunk) == nltk.tree.Tree and chunk.label() == "DataChunk":
                    DatachunkedLst = chunk.leaves()
                    Datachunked = [leaf[0] for leaf in DatachunkedLst if leaf[1] == 'CD']
                    Data = '/'.join(Datachunked)

Ошибка: если type(chunk) == nltk.tree.Tree и chunk.label() == "DataChunk": TypeError: объект 'str' не вызывается

Однако я могу печатать chunk.label()

1 ответ

Решение

Я подозреваю, что происходит следующее:

Где-то в вашем коде - хотя он не включен в ваш фрагмент - вы присваиваете строковое значение переменной с именем typeНапример:

type = "context-free"

Это дает именно ваше сообщение об ошибке:

>>> type = "context-free"
>>> type(object())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

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

Один из способов избежать подобных ошибок - использовать линтер: инструмент, который запускается вашим редактором в фоновом режиме, проверяет ваш код и обнаруживает опасные вещи, как это. Я настоятельно рекомендую вам попробовать один!

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