def specifier_before_cem_and_value_phrase(self): return ( self.specifier_phrase + OneOrMore(Not(self.cem_phrase | self.specifier_phrase | self.value_phrase) + Any().hide()) + self.cem_phrase + OneOrMore(Not(self.cem_phrase | self.specifier_phrase | self.value_phrase) + Any().hide()) + Optional(self.prefix) + self.value_phrase)('root_phrase')
def specifier_before_cem_and_value_phrase(self): return (self.specifier_phrase + OneOrMore( Not(self.cem_phrase | self.specifier_phrase | self.value_phrase) + Any().hide()) #+ self.connection + Optional(self.article)) + self.cem_phrase + OneOrMore( Not(self.cem_phrase | self.specifier_phrase | I('dielectric') + I('constant') | self.value_phrase | I('not')) + Any().hide()) + Optional(self.prefix) + self.value_phrase)('root_phrase')
def multi_entity_phrase_2(self): """single compound, single specifier, multiple transitions e.g. BiFeO3 shows magnetic transitions at 1093 and 640 K """ return Group(self.single_cem + OneOrMore(Not(self.single_cem | self.specifier_phrase | self.value_phrase) + Any().hide()) + self.specifier_phrase + OneOrMore(Not(self.single_cem | self.specifier_phrase | self.value_phrase) + Any().hide()) + self.list_of_values + Optional(delim).hide() + Optional(I('respectively')))('multi_entity_phrase_2')
def value_specifier_cem_phrase(self): return ( self.value_phrase + Optional(delim | lbrct | rbrct) + Optional(I('which') | I('there')).hide() + Optional(I('likely') | I('close') | (I('can') + I('be'))).hide() + Optional(I('corresponds') | I('associated') | I('corresponding')).hide() + Optional(I('to') | I('with') | I('is')).hide() + Optional(I('the') | I('a')).hide() + Optional(I('transition')).hide() + Optional(I('to').hide()) + Optional(I('a')).hide() + self.specifier_phrase + Not(I('=')) + Not(self.value_phrase) + Optional(I('of') | I('in')).hide() + self.cem_phrase)('root_phrase')
def multi_entity_phrase_4a(self): """multiple compounds, single specifier, single transition e.g. TC of 640 K in BifEO3, LaFeO3 and MnO """ return Group(self.single_specifier_and_value + OneOrMore(Not(self.single_cem | self.specifier_phrase | self.value_phrase) + Any().hide()) + self.list_of_cems)('multi_entity_phrase_4')
def multi_entity_phrase_1(self): """Single compound, multiple specifiers, values e.g. BiFeO3 has TC1 = 1093 K and Tc2 = 640 K """ return Group(self.single_cem + OneOrMore(Not(self.single_cem | self.specifier_phrase | self.value_phrase) + Any().hide()) + self.list_of_properties)('multi_entity_phrase_1')
def cem_before_specifier_and_value_phrase(self): return (self.cem_phrase + OneOrMore( Not(self.cem_phrase | self.specifier_phrase | self.specifier_and_value) + Any().hide()) #+ self.between_cem_specifier) + self.specifier_phrase + self.specifier_and_value)('root_phrase')
def multi_entity_phrase_3a(self): """multiple compounds, single specifier, multiple transitions cems first e.g. TC in BiFeO3 and LaFeO3 of 640 and 750 K """ return Group(Optional(self.specifier_phrase) + Optional(I('in') | I('for')).hide() + self.list_of_cems + OneOrMore(Not(self.single_cem | self.specifier_phrase | self.value_phrase) + Any().hide()) + self.prefix + self.list_of_values + Optional(delim.hide() + I('respectively').hide()))('multi_entity_phrase_3')
def value_phrase(self): number = R('^[\+\-–−]?\d+(\.\d+)?$') joined_range = R('^[\+\-–−]?\d+(\.\d+)?[\-–−~∼˜]\d+(\.\d+)?$')( 'raw_value').add_action(merge) spaced_range = (number + (R('^[\-–−~∼˜]$') + number | number))('raw_value').add_action(merge) to_range = (number + I('to') + number)('raw_value').add_action(join) plusminus_range = (number + R('±') + number)('value').add_action(join) value_range = (Optional(R('^[\-–−]$')) + (plusminus_range | joined_range | spaced_range | to_range))('raw_value').add_action(merge) value_single = (Optional(R('^[~∼˜\<\>]$')) + Optional(R('^[\-–−]$')) + number)('raw_value').add_action(merge) inumber = (R('\d*\.?\d*[i]$')).add_action(join) # inumber = R('^([-+]?(\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?[r]?|[-+]?((\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?)?[i]|[-+]?(\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?[r]?[-+]((\d+\.?\d*|\d*\.?\d+)([Ee][-+]?[0-2]?\d{1,2})?)?[i])$') ivalue = (R('\d*\.?\d*$') + R('^[\+\-–−]?') + inumber).add_action(join) value = Optional(lbrct).hide() + ( ivalue | value_range | value_single)('raw_value') + Not( I('wt%') | I('vol%') | I('K') | I('times') | I('GPa') | I('wt') | I('vol') | I('%') | I('nm') | I('zF') | W('°') | W('KV') | W('kV') | W('MV') | I('kHz') | I('Hz') | I('GHz') | W('V') | W('J') | W('eV') | I('MHz')) + Optional(rbrct).hide() return value
def multi_entity_phrase_4b(self): """Cems first""" return Group(self.list_of_cems + OneOrMore(Not(self.single_cem | self.specifier_phrase | self.value_phrase) + Any().hide()) + self.single_specifier_and_value)('multi_entity_phrase_4')
def cem_after_specifier_and_value_phrase(self): return ( self.specifier_and_value + OneOrMore(Not(self.cem_phrase | self.specifier_phrase | self.value_phrase) + Any().hide()) + self.cem_phrase)('root_phrase')