问题描述
运行代码时,我收到以下错误消息。我认为故障必须出在运行主脚本时调用的简短脚本上,因为这是唯一一个包含“ 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)