运行python脚本时发生错误:“ AttributeError:'EventObject'对象没有属性'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,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

,

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

例如:

CNContactPickerViewController

然后

if let contactPhone = item.phoneNumbers.first {
let countryCode = contactPhone.value.value(forKey: "countryCode") as? String
//"us"
}

之前

EventObject e = EventObject()

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

print(e.sentence)