Esempio n. 1
0
    def serialize_numerical(self, subj, fe, url):
        """ Serializes a numerical FE found by the normalizer
        """
        literal = fe['literal']
        if fe['fe'] == 'Time':
            value = wikidata.format_date(**literal)
            yield wikidata.finalize_statement(subj,
                                              'P585',
                                              value,
                                              self.language,
                                              url,
                                              resolve_property=False,
                                              resolve_value=False)
        elif fe['fe'] == 'Duration':
            if 'start' in literal:
                value = wikidata.format_date(**literal['start'])
                yield wikidata.finalize_statement(subj,
                                                  'P580',
                                                  value,
                                                  self.language,
                                                  url,
                                                  resolve_property=False,
                                                  resolve_value=False)

            if 'end' in literal:
                value = wikidata.format_date(**literal['end'])
                yield wikidata.finalize_statement(subj,
                                                  'P580',
                                                  value,
                                                  self.language,
                                                  url,
                                                  resolve_property=False,
                                                  resolve_value=False)
Esempio n. 2
0
    def find_qualifiers(self, fes):
        """ Finds all FEs that could serve as qualifiers instead of full statements
        """

        qualifiers = defaultdict(list)
        for fe in fes:
            if fe['fe'] == 'Time':
                literal = fe['literal']
                value = wikidata.format_date(**literal)
                qualifiers['P585'].append(value)
            elif fe['fe'] == 'Duration':
                literal = fe['literal']
                if 'start' in literal:
                    value = wikidata.format_date(**literal['start'])
                    qualifiers['P580'].append(value)

                if 'end' in literal:
                    value = wikidata.format_date(**literal['end'])
                    qualifiers['P580'].append(value)
            elif fe['fe'] == 'Place':
                value = None
                if 'link' in fe:
                    value = wikidata.wikidata_id_from_wikipedia_url(fe['link']['uri'])

                if not value:
                    value = wikidata.resolve('P276', fe['chunk'], self.language)

                if value:
                    qualifiers['P276'].append(value)

        return qualifiers
Esempio n. 3
0
    def find_qualifiers(self, fes):
        """ Finds all FEs that could serve as qualifiers instead of full statements
        """

        qualifiers = defaultdict(list)
        for fe in fes:
            if fe["fe"] == "Time":
                literal = fe["literal"]
                value = wikidata.format_date(**literal)
                qualifiers["P585"].append(value)
            elif fe["fe"] == "Duration":
                literal = fe["literal"]
                if "start" in literal:
                    value = wikidata.format_date(**literal["start"])
                    qualifiers["P580"].append(value)

                if "end" in literal:
                    value = wikidata.format_date(**literal["end"])
                    qualifiers["P580"].append(value)
            elif fe["fe"] == "Place":
                value = None
                if "link" in fe:
                    value = wikidata.wikidata_id_from_wikipedia_url(fe["link"]["uri"])

                if not value:
                    value = wikidata.resolve("P276", fe["chunk"], self.language)

                if value:
                    qualifiers["P276"].append(value)

        return qualifiers
Esempio n. 4
0
    def serialize_numerical(self, subj, fe, url):
        """ Serializes a numerical FE found by the normalizer
        """
        literal = fe['literal']
        if fe['fe'] == 'Time':
            value = wikidata.format_date(**literal)
            yield wikidata.finalize_statement(subj, 'P585', value, self.language, url,
                                              resolve_property=False, resolve_value=False)
        elif fe['fe'] == 'Duration':
            if 'start' in literal:
                value = wikidata.format_date(**literal['start'])
                yield wikidata.finalize_statement(subj, 'P580', value, self.language, url,
                                                  resolve_property=False, resolve_value=False)

            if 'end' in literal:
                value = wikidata.format_date(**literal['end'])
                yield wikidata.finalize_statement(subj, 'P580', value, self.language, url,
                                                  resolve_property=False, resolve_value=False)
Esempio n. 5
0
    def test_missing(self):
        self.assertRaises(ValueError, wikidata.format_date, None, None, None)
        self.assertRaises(ValueError, wikidata.format_date, None, None, 1)
        self.assertRaises(ValueError, wikidata.format_date, None, 1, None)
        self.assertRaises(ValueError, wikidata.format_date, 1, None, 1)

        try:
            wikidata.format_date(1, 1, 1)
            wikidata.format_date(1, 1, None)
            wikidata.format_date(1, None, None)
            wikidata.format_date(None, 1, 1)
        except ValueError:
            self.fail('date should be accepted')
Esempio n. 6
0
    def serialize_numerical(self, subj, fe, data):
        """ Serializes a numerical FE found by the normalizer
        """
        literal = fe["literal"]
        wikidata_property = self.lu_fe_map.get((data["lu"], fe["fe"]), {}).get("wid")
        if not wikidata_property:
            logger.debug('skipping *numerical* FE of type "%s" and lu "%s"', fe["fe"], data["lu"])
            return

        if fe["fe"] == "Time":
            value = wikidata.format_date(**literal)
            yield wikidata.finalize_statement(
                subj, wikidata_property, value, self.language, data["url"], resolve_property=False, resolve_value=False
            )
        elif fe["fe"] == "Duration":
            if "start" in literal:
                value = wikidata.format_date(**literal["start"])
                yield wikidata.finalize_statement(
                    subj,
                    wikidata_property,
                    value,
                    self.language,
                    data["url"],
                    resolve_property=False,
                    resolve_value=False,
                )

            if "end" in literal:
                value = wikidata.format_date(**literal["end"])
                yield wikidata.finalize_statement(
                    subj,
                    wikidata_property,
                    value,
                    self.language,
                    data["url"],
                    resolve_property=False,
                    resolve_value=False,
                )
Esempio n. 7
0
    def serialize_numerical(self, subj, fe, data):
        """ Serializes a numerical FE found by the normalizer
        """
        literal = fe['literal']
        wikidata_property = self.lu_fe_map.get((data['lu'], fe['fe']), {}).get('wid')
        if not wikidata_property:
            logger.debug('skipping *numerical* FE of type "%s" and lu "%s"',
                         fe['fe'], data['lu'])
            return

        if fe['fe'] == 'Time':
            value = wikidata.format_date(**literal)
            yield wikidata.finalize_statement(subj, wikidata_property, value, self.language, data['url'],
                                              resolve_property=False, resolve_value=False)
        elif fe['fe'] == 'Duration':
            if 'start' in literal:
                value = wikidata.format_date(**literal['start'])
                yield wikidata.finalize_statement(subj, wikidata_property, value, self.language, data['url'],
                                                  resolve_property=False, resolve_value=False)

            if 'end' in literal:
                value = wikidata.format_date(**literal['end'])
                yield wikidata.finalize_statement(subj, wikidata_property, value, self.language, data['url'],
                                                  resolve_property=False, resolve_value=False)
Esempio n. 8
0
 def test_negative_year(self):
     self.assertEqual(wikidata.format_date(-100, None, None),
                      '-00000000100-01-01T00:00:00Z/9')
     self.assertRaises(ValueError, wikidata.format_date, 100, -1, 1)
     self.assertRaises(ValueError, wikidata.format_date, 100, 1, -1)
Esempio n. 9
0
 def test_date_width(self):
     self.assertEqual(wikidata.format_date(1967, 1, 17),
                      '+00000001967-01-17T00:00:00Z/11')