def test_resolve(self):

        resolver = ResolvePopoloName(
                date = datetime.date(month=11, year=2010, day=1) )

        popolo_person = resolver.get_person('J Q Smith')
        self.assertEqual(self.john_q, popolo_person)
    def test_resolve_with_filter(self):
        resolver = ResolvePopoloName(
            date=datetime.date(month=11, year=2010, day=1),
            person_filter=ExcludePeopleWithNoMiddleNames(),
        )

        popolo_person = resolver.get_person('John Smith')
        self.assertEqual(popolo_person.name, 'John Quentin Smith')
Пример #3
0
 def set_resolver_for_date(self, date_string='', date=None):
     self.resolver = ResolvePopoloName(
         date=date,
         date_string=date_string,
         person_filter=AllowedPersonFilter(self.pombola_id_blacklist),
     )
Пример #4
0
class ImportZAMixin(object):
    def __init__(self, instance=None, commit=True, pombola_id_blacklist=None, **kwargs):
        super(ImportZAMixin, self).__init__(
            instance=instance,
            commit=commit,
            **kwargs
        )
        self.person_cache = {}
        self.pombola_id_blacklist = pombola_id_blacklist

    def set_resolver_for_date(self, date_string='', date=None):
        self.resolver = ResolvePopoloName(
            date=date,
            date_string=date_string,
            person_filter=AllowedPersonFilter(self.pombola_id_blacklist),
        )

    def debug_output_csv_row(self, pombola_person_slug, from_cache, our_speaker, speaker_from_slug):
        '''A method to help produce data for analyzing name resolution results'''
        import csv
        with open('name-resolution.log', 'ab') as f:
            writer = csv.writer(f)
            writer.writerow([
                str(self.resolver.date),
                '' if pombola_person_slug is None else pombola_person_slug,
                our_speaker.id if our_speaker else '',
                our_speaker.name.encode('utf-8') if our_speaker else '',
                speaker_from_slug.id if speaker_from_slug else '',
                speaker_from_slug.name.encode('utf-8') if speaker_from_slug else '',
            ])

    def get_person(self, name, party, pombola_person_slug=None):

        # If we can directly find the person from the
        # pombola_person_slug, use that - the Code4SA / PMG
        # identification of speakers seems to be better than that from
        # popolo_name_resolver.
        speaker_from_slug = None
        if pombola_person_slug is not None:
            speaker_from_slug = Speaker.objects.filter(
                identifiers__scheme='pombola_person_slug',
                identifiers__identifier=pombola_person_slug).first()
            if speaker_from_slug:
                return speaker_from_slug

        cached = self.person_cache.get(name, None)
        if cached:
            return cached

        display_name = name or '(narrative)'

        speaker = None
        person = None

        if name:
            person = self.resolver.get_person(display_name, party)
            if person:
                speaker = person.speaker

        if not speaker:
            try:
                speaker = Speaker.objects.get(instance=self.instance, name=display_name)
            except Speaker.DoesNotExist:
                speaker = Speaker(instance=self.instance, name=display_name)
                if self.commit:
                    speaker.save()

        self.person_cache[name] = speaker
        return speaker
Пример #5
0
 def set_resolver_for_date(self, date_string='', date=None):
     self.resolver = ResolvePopoloName(
         date=date,
         date_string=date_string,
         person_filter=AllowedPersonFilter(self.pombola_id_blacklist),
     )
Пример #6
0
class ImportZAMixin(object):
    def __init__(self, instance=None, commit=True, pombola_id_blacklist=None, **kwargs):
        super(ImportZAMixin, self).__init__(
            instance=instance,
            commit=commit,
            **kwargs
        )
        self.person_cache = {}
        self.pombola_id_blacklist = pombola_id_blacklist

    def set_resolver_for_date(self, date_string='', date=None):
        self.resolver = ResolvePopoloName(
            date=date,
            date_string=date_string,
            person_filter=AllowedPersonFilter(self.pombola_id_blacklist),
        )

    def debug_output_csv_row(self, pombola_person_slug, from_cache, our_speaker, speaker_from_slug):
        '''A method to help produce data for analyzing name resolution results'''
        import csv
        with open('name-resolution.log', 'ab') as f:
            writer = csv.writer(f)
            writer.writerow([
                str(self.resolver.date),
                '' if pombola_person_slug is None else pombola_person_slug,
                our_speaker.id if our_speaker else '',
                our_speaker.name.encode('utf-8') if our_speaker else '',
                speaker_from_slug.id if speaker_from_slug else '',
                speaker_from_slug.name.encode(
                    'utf-8') if speaker_from_slug else '',
            ])

    def get_person(self, name, party, pombola_person_slug=None):

        # If we can directly find the person from the
        # pombola_person_slug, use that - the Code4SA / PMG
        # identification of speakers seems to be better than that from
        # popolo_name_resolver.
        speaker_from_slug = None
        if pombola_person_slug is not None:
            speaker_from_slug = Speaker.objects.filter(
                identifiers__scheme='pombola_person_slug',
                identifiers__identifier=pombola_person_slug).first()
            if speaker_from_slug:
                return speaker_from_slug

        cached = self.person_cache.get(name, None)
        if cached:
            return cached

        display_name = name or '(narrative)'

        speaker = None
        person = None

        if name:
            person = self.resolver.get_person(display_name, party)
            if person:
                speaker = person.speaker

        if not speaker:
            try:
                speaker = Speaker.objects.get(
                    instance=self.instance, name=display_name)
            except Speaker.DoesNotExist:
                speaker = Speaker(instance=self.instance, name=display_name)
                if self.commit:
                    speaker.save()

        self.person_cache[name] = speaker
        return speaker
Пример #7
0
 def test_resolve(self):
     resolver = ResolvePopoloName(date=date(2013, 06, 21))
     person = resolver.get_person('Mrs A Steyn', None)
     self.assertTrue(person)