def testFD4DoesNotFindFatherDaughterWhenFatherNotPresentInParagraph(self):
     test_case = "Comme sa femme préférée, une fille du cheik, ne lui avait pas donné d’enfants, il épousa une fille des Mokrani, seigneurs de la Medjana."
     parsed_doc = self.nlp(test_case)
     relationship_set = RelationshipHandler()
     matcher = spacy.matcher.Matcher(self.nlp.vocab)
     matcher.add('FATHER_DAUGHTER_4', relationship_set.handle_fd_4,
                 patterns.MATCHERS['FATHER_DAUGHTER_4'])
     matches = matcher(parsed_doc)
     self.assertEqual(0, len(relationship_set.relationships))
 def testFD1DoesNotFindFatherDaughterWhenFatherNotPresentInParagraph(self):
     test_case = "Il, après s'être vu enlever par ses adversaires 8.000 têtes de bétail et une partie de ses bagages, était sur le point de se rendre, lorsque sa fille, Euldjia « se fit apporter les vêtements les plus beaux « et, s’en étant vêtue, monta achevai, appela les femmes « et les filles, ses parentes ou ses amies qui montèrent « aussi à cheval ; puis, elle harangua les femmes en leur « disant : « Puisque ces hommes n’ont pas de courage « d’aller contre les Turcs qui viendront bientôt nous « violer à leurs yeux, allons nous-mêmes vendre chèrement notre vie et ne restons pas plus longtemps avec ces lâches."
     parsed_doc = self.nlp(test_case)
     relationship_set = RelationshipHandler()
     matcher = spacy.matcher.Matcher(self.nlp.vocab)
     matcher.add('FATHER_DAUGHTER_1', relationship_set.handle_fd_1,
                 patterns.MATCHERS['FATHER_DAUGHTER_1'])
     matches = matcher(parsed_doc)
     self.assertEqual(0, len(relationship_set.relationships))
 def testFD4FindsFatherWhenPresentAndUneIsPresent(self):
     test_case = "Comme sa femme préférée, une fille de Ben-Gana, ne lui avait pas donné d’enfants, il épousa une fille des Mokrani, seigneurs de la Medjana."
     parsed_doc = self.nlp(test_case)
     relationship_set = RelationshipHandler()
     matcher = spacy.matcher.Matcher(self.nlp.vocab)
     matcher.add('FATHER_DAUGHTER_4', relationship_set.handle_fd_4,
                 patterns.MATCHERS['FATHER_DAUGHTER_4'])
     matches = matcher(parsed_doc)
     self.assertEqual(1, len(relationship_set.relationships))
     relationship = relationship_set.relationships[0]
     self.assertEqual(relationship.father, 'Ben-Gana')
     self.assertEqual(relationship.daughter, 'unnamed daughter')
 def testFD1FindsFatherDaughterWhenCommaSeparatesFilleAndName(self):
     test_case = "D’après lui, le bey de Constantine, allié â celui de Tunis, avait, dans le cours de Tannée précédente (1724) attaqué à Timproviste la tribu des Henanecha. Bou-Aziz, après s'être vu enlever par ses adversaires 8.000 têtes de bétail et une partie de ses bagages, était sur le point de se rendre, lorsque sa fille, Euldjia « se fit apporter les vêtements les plus beaux « et, s’en étant vêtue, monta achevai, appela les femmes « et les filles, ses parentes ou ses amies qui montèrent « aussi à cheval ; puis, elle harangua les femmes en leur « disant : « Puisque ces hommes n’ont pas de courage « d’aller contre les Turcs qui viendront bientôt nous « violer à leurs yeux, allons nous-mêmes vendre chèrement notre vie et ne restons pas plus longtemps avec ces lâches."
     parsed_doc = self.nlp(test_case)
     relationship_set = RelationshipHandler()
     matcher = spacy.matcher.Matcher(self.nlp.vocab)
     matcher.add('FATHER_DAUGHTER_1', relationship_set.handle_fd_1,
                 patterns.MATCHERS['FATHER_DAUGHTER_1'])
     matches = matcher(parsed_doc)
     self.assertEqual(1, len(relationship_set.relationships))
     relationship = relationship_set.relationships[0]
     self.assertEqual('Bou-Aziz', relationship.father)
     self.assertEqual('Euldjia', relationship.daughter)
def main():
    in_file = codecs.open('Mercier_1600-1837.txt').read()
    relationship_set = RelationshipHandler()
    merger = quotemerger.HyphenatedNameMerger(nlp.vocab)
    nlp.add_pipe(merger.merger, first=True)
    matcher.add('FATHER_SON_1', relationship_set.handle_fs_1,
                MATCHERS['FATHER_SON_1'])
    matcher.add('FATHER_SON_2', relationship_set.handle_fs_2,
                MATCHERS['FATHER_SON_2'])
    matcher.add('FATHER_SON_3', relationship_set.handle_fs_3,
                MATCHERS['FATHER_SON_3'])

    matcher.add('FATHER_DAUGHTER_1', relationship_set.handle_fd_1,
                MATCHERS['FATHER_DAUGHTER_1'])
    matcher.add('FATHER_DAUGHTER_2', relationship_set.handle_fd_2,
                MATCHERS['FATHER_DAUGHTER_2'])
    matcher.add('FATHER_DAUGHTER_3', relationship_set.handle_fd_3,
                MATCHERS['FATHER_DAUGHTER_3'])
    matcher.add('FATHER_DAUGHTER_4', relationship_set.handle_fd_4,
                MATCHERS['FATHER_DAUGHTER_4'])

    matcher.add('MARIAGE_1', relationship_set.handle_mariage_1_and_2,
                MATCHERS['MARIAGE_1'])
    matcher.add('MARIAGE_2', relationship_set.handle_mariage_1_and_2,
                MATCHERS['MARIAGE_2'])
    matcher.add('MARIAGE_3', relationship_set.handle_mariage_3_and_4,
                MATCHERS['MARIAGE_3'])
    matcher.add('MARIAGE_4', relationship_set.handle_mariage_3_and_4,
                MATCHERS['MARIAGE_4'])
    matcher.add('MARIAGE_5', relationship_set.handle_mariage_5,
                MATCHERS['MARIAGE_5'])
    matcher.add('MARIAGE_6', relationship_set.handle_mariage_6,
                MATCHERS['MARIAGE_6'])

    matcher.add('GENDRE_1', relationship_set.handle_gendre_1,
                MATCHERS['GENDRE_1'])
    matcher.add('GENDRE_2', relationship_set.handle_gendre_2,
                MATCHERS['GENDRE_2'])
    matcher.add('GENDRE_3', relationship_set.handle_gendre_3,
                MATCHERS['GENDRE_3'])

    matcher.add('PERE', relationship_set.handle_pere_1, MATCHERS['PERE'])

    parsed_doc = nlp(in_file)
    matches = matcher(parsed_doc)

    out_file = codecs.open('relations.csv', 'w', encoding='utf8')
    out_file.write('parent,child,relation type\n')
    for rel in relationship_set.relationships:
        if isinstance(rel, FatherSonRelationship):
            out_file.write('{},{},son\n'.format(rel.father, rel.son))
            print('{} is the father of {}'.format(rel.father, rel.son))
        elif isinstance(rel, FatherDaughterRelationship):
            out_file.write('{},{},daughter\n'.format(rel.father, rel.daughter))
            print('{} is the father of {}'.format(rel.father, rel.daughter))
        elif isinstance(rel, GendreRelationship):
            out_file.write('{},{},daughter'.format(rel.father, rel.name))
            out_file.write('{},{},spouse'.format(rel.husband, rel.name))
            print('An unnamed woman is the daughter of {} and husband of {}'.
                  format(rel.father, rel.husband))
    out_file.close()

    print('Matchers done')