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 = "..."
当我 运行 我的代码时,我收到以下错误消息。我认为故障必须出在我 运行 主脚本时调用的一个短脚本中,因为这是唯一一个有“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 = "..."