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')