error when running python script: "AttributeError: 'EventObject' object has no attribute 'sentence'"

error when running python script: "AttributeError: 'EventObject' object has no attribute 'sentence'"

当我 运行 我的代码时,我收到以下错误消息。我认为故障必须出在我 运行 主脚本时调用的一个短脚本中,因为这是唯一一个有“EventObject”的脚本。这是错误:

AttributeError: 'EventObject' object has no attribute 'sentence'

这是短脚本中的代码:

class AnnotationsObject:

def __init__(self):
    self.eventlist = []
    self.entitylist = []
    self.polaritytriggerslist = []


class EventObject:
    def __init__(self):
        self.eventtext = []
        self.polarity = None
        self.sameclause = False

class EntityObject:
    def __init__(self):
        self.entitytype = None
        self.entitytext = []
        self.polarity = []
        self.metonymy = False

class PolarityTriggersObject:
    def __init__(self):
        self.text = []
        self.polarity = []
        self.target = []
        self.id = None
        self.irony = []
        self.eventrelationpolarity = []
        self.span = []

对可能出现的问题有什么想法吗?

编辑:这是调用“EventObject”和“sentence”属性的代码

def write_annotations_eventpolarity(allAnnotationsDict, annotatornames, outfilefolder):
alleventsdict = get_all_events(allAnnotationsDict)
'''
Gets, for every unique event (alleventslist), its polarity given by each annotator
'''
with open(os.path.join(outfilefolder,'annotations_eventpolarity.csv'), 'w') as csvfile:
    outfilewriter = csv.writer(csvfile, delimiter='\t',quotechar='|', quoting=csv.QUOTE_MINIMAL)
    outfilewriter.writerow(['Document', 'Event'] + [a for a in annotatornames] + ['Sentence', 'Sentence without event'])
    for documentname, annotatordict in allAnnotationsDict.items():
        #Get a list of all events per document, consider the first annotator in the dict, as the events are the same for each annotator.
        allevents = alleventsdict[documentname][annotatornames[0]]
        alleventstrings = ['+'.join(x.eventtext) for x in allevents] #Events can be stored as lists of two non-consecutive spans
        alleventsentences = [x.sentence for x in allevents]
        alleventsentenceswithoutevent = [x.sentencewithoutevent for x in allevents]
        seen = []
        for eventText, eventSent, eventSentWith in zip(alleventstrings, alleventsentences, alleventsentenceswithoutevent):
            rowelements = [] #Rowelements will be written to output file
            rowelements.append(documentname)
            rowelements.append(eventText)
            for a in annotatornames:
                pol = []
                eventobjectslist = alleventsdict[documentname][a]
                for eveobj in eventobjectslist:
                    found = False
                    if '+'.join(eveobj.eventtext) == eventText and eveobj.sentence == eventSent:
                        if eveobj.polarity == None:
                            pol.append('None')
                        else:
                            pol.append(eveobj.polarity)
                        found = True
                    else:
                        continue
                    if not found:
                        print('Warning: event\t{0}\t{1}\tfrom annotator {2} not found in alleventslist.'.format(eveobj.eventtext, documentname, a))
                        warnings.append('Write annotations for event polarities: event\t{0}\t{1}\tfrom annotator {2} not found in alleventslist.'.format(eveobj.eventtext, documentname, a))
                if len(pol) > 1 and 'None' in pol: #Event polarity can be 'None' if the event is part of a linked event span and its polarity was added to the other part
                    indx_none = pol.index('None') #Remove 'None' polarities
                    pol.pop(indx_none)
                rowelements.append(','.join(list(set(pol))))
            rowelements.append(eventSent)
            rowelements.append(eventSentWith)
            if not (eventText,eventSent) in seen: #Discard 100% duplicates (i.e. events that are annotated twice in the sentence)
                outfilewriter.writerow(rowelements)
            seen.append((eventText,eventSent))

错误似乎发生在 alleventsentences = [x.sentence for x in allevents]

class EventObject:
def __init__(self):
    self.eventtext = []
    self.polarity = None
    self.sameclause = False

您在这里缺少 sentence。类似于 self.sentence = None

您正在从对象中读取未初始化的字段。

例如:

EventObject e = EventObject()

然后

print(e.sentence)

之前

e.sentence = "..."

另一种解决方案是在构造函数中初始化字段:

class EventObject:
    def __init__(self):
        self.eventtext = []
        self.polarity = None
        self.sameclause = False
        self.sentence = "..."