def test_match_ads_author01(self): for f1,f2 in ( \ ([self.A1,self.C1,self.M1], [self.C2,self.M2,self.A2]), ([self.A1,self.C1,self.M1], [self.A2,self.C2,self.M2]), ([self.A1,self.C1,self.M1], [self.C2,self.A2,self.M2]), ([self.A1,self.C1,self.M1], [self.M2,self.A2,self.C2]), ([self.A1,self.C1,self.M1], [self.M2,self.C2,self.A2])): matches = author_match.match_ads_author_fields(f1, f2) self.assertEqual(matches, [(self.A1, self.A2), (self.C1, self.C2), (self.M1, self.M2)]) matches = author_match.match_ads_author_fields(f1, f2, impl='np') self.assertEqual(matches, [(self.A1, self.A2), (self.C1, self.C2), (self.M1, self.M2)])
def test_match_ads_author05(self): matches = author_match.match_ads_author_fields( [self.A1, self.C1, self.M1], []) self.assertEqual(matches, [(self.A1, None), (self.C1, None), (self.M1, None)]) matches = author_match.match_ads_author_fields( [self.A1, self.C1, self.M1], [], impl='np') self.assertEqual(matches, [(self.A1, None), (self.C1, None), (self.M1, None)]) matches = author_match.match_ads_author_fields( [], [self.A1, self.C1, self.M1]) self.assertEqual(matches, []) matches = author_match.match_ads_author_fields( [], [self.A1, self.C1, self.M1], impl='np') self.assertEqual(matches, [])
def test_match_ads_author06(self): # case where 1987Ap&SS.138...61H was incorrectly matched to 1986tnra.book.....D # (no match should be take place here) a1 = { "name": { "western": "Hadrava, P." }, "affiliations": ["Astronomical Institute of the Czechoslovak Academy of Sciences"] } a2 = {"name": {'western': 'de Waard, Gerrit Jan'}, "affiliations": []} matches = author_match.match_ads_author_fields([a1], [a2]) self.assertEqual(matches, [(a1, None)]) self.assertFalse(author_match.is_suitable_match(a1, a2))
def authorMerger(self,field='authors'): data = [ [i[field],i['tempdata']] for i in self.blocks if field in i] result = None while len(data) > 0: f1 = data.pop() f2 = result if result else data.pop() result = self._getBestOrigin(f1,f2,'authors') other = f2 if result == f1 else f1 #Only do the matching if at least one of the the bestOrigin authors lacks an affiliation #AND the other author field has at least one if not all( [i['affiliations'] for i in result[0]] ) and\ any( [i['affiliations'] for i in other[0]] ): best_matches = author_match.match_ads_author_fields(result[0],other[0]) for match in best_matches: if not author_match.is_suitable_match(*match): continue if not match[0]['affiliations'] and match[1]['affiliations']: match[0]['affiliations'] = match[1]['affiliations'] result = [[i[0] for i in best_matches],result[1]] return result[0]
def test_match_ads_author03(self): matches = author_match.match_ads_author_fields( [self.A1, self.C1], [self.M2, self.C2, self.A2]) self.assertEqual(matches, [(self.A1, self.A2), (self.C1, self.C2)]) matches = author_match.match_ads_author_fields( [self.A1, self.C1], [self.M2, self.C2, self.A2], impl='np') self.assertEqual(matches, [(self.A1, self.A2), (self.C1, self.C2)]) matches = author_match.match_ads_author_fields( [self.M1, self.C1], [self.M2, self.C2, self.A2]) self.assertEqual(matches, [(self.M1, self.M2), (self.C1, self.C2)]) matches = author_match.match_ads_author_fields( [self.M1, self.C1], [self.M2, self.C2, self.A2], impl='np') self.assertEqual(matches, [(self.M1, self.M2), (self.C1, self.C2)]) matches = author_match.match_ads_author_fields( [self.M1, self.A1], [self.M2, self.C2, self.A2]) self.assertEqual(matches, [(self.M1, self.M2), (self.A1, self.A2)]) matches = author_match.match_ads_author_fields( [self.M1, self.A1], [self.M2, self.C2, self.A2], impl='np') self.assertEqual(matches, [(self.M1, self.M2), (self.A1, self.A2)]) matches = author_match.match_ads_author_fields( [self.A1], [self.M2, self.C2, self.A2]) self.assertEqual(matches, [(self.A1, self.A2)]) matches = author_match.match_ads_author_fields( [self.A1], [self.M2, self.C2, self.A2], impl='np') self.assertEqual(matches, [(self.A1, self.A2)]) matches = author_match.match_ads_author_fields( [self.C1], [self.M2, self.C2, self.A2]) self.assertEqual(matches, [(self.C1, self.C2)]) matches = author_match.match_ads_author_fields( [self.C1], [self.M2, self.C2, self.A2], impl='np') self.assertEqual(matches, [(self.C1, self.C2)]) matches = author_match.match_ads_author_fields( [self.M1], [self.M2, self.C2, self.A2]) self.assertEqual(matches, [(self.M1, self.M2)]) matches = author_match.match_ads_author_fields( [self.M1], [self.M2, self.C2, self.A2], impl='np') self.assertEqual(matches, [(self.M1, self.M2)]) matches = author_match.match_ads_author_fields( [self.A1, self.C1, self.M1], [self.A2]) self.assertEqual(matches, [(self.A1, self.A2), (self.C1, None), (self.M1, None)]) matches = author_match.match_ads_author_fields( [self.A1, self.C1, self.M1], [self.A2], impl='np') self.assertEqual(matches, [(self.A1, self.A2), (self.C1, None), (self.M1, None)]) matches = author_match.match_ads_author_fields( [self.A1, self.C1, self.M1], [self.C2]) self.assertEqual(matches, [(self.A1, None), (self.C1, self.C2), (self.M1, None)]) matches = author_match.match_ads_author_fields( [self.A1, self.C1, self.M1], [self.C2], impl='np') self.assertEqual(matches, [(self.A1, None), (self.C1, self.C2), (self.M1, None)]) matches = author_match.match_ads_author_fields( [self.A1, self.C1, self.M1], [self.M2]) self.assertEqual(matches, [(self.A1, None), (self.C1, None), (self.M1, self.M2)]) matches = author_match.match_ads_author_fields( [self.A1, self.C1, self.M1], [self.M2], impl='np') self.assertEqual(matches, [(self.A1, None), (self.C1, None), (self.M1, self.M2)])
def test_match_ads_author04(self): # 1993AIAAJ..31..447M (crossref vs. sti) [c1, c2, c3, c4, c5] = [{ 'affiliations': [], 'name': { 'western': 'Miles, Richard B.' } }, { 'affiliations': [], 'name': { 'western': 'Lempert, Walter R.' } }, { 'affiliations': [], 'name': { 'western': 'She, Zhen-Su' } }, { 'affiliations': [], 'name': { 'western': 'Zhang, Boying' } }, { 'affiliations': [], 'name': { 'western': 'Zhou, Deyu' } }] [s1, s2, s3, s4, s5] = [{ 'affiliations': ['Princeton Univ., NJ'], 'name': { 'western': 'Miles, Richard B.' } }, { 'affiliations': ['Princeton Univ., NJ'], 'name': { 'western': 'Zhou, Deyu' } }, { 'affiliations': ['Princeton Univ., NJ'], 'name': { 'western': 'Zhang, Boying' } }, { 'affiliations': ['Princeton Univ., NJ'], 'name': { 'western': 'Lempert, Walter R.' } }, { 'affiliations': ['Arizona Univ., Tucson, AZ'], 'name': { 'western': 'She, Zhen-Su' } }] crossref = [c1, c2, c3, c4, c5] sti = [s1, s2, s3, s4, s5] res = [(c1, s1), (c2, s4), (c3, s5), (c4, s3), (c5, s2)] matches = author_match.match_ads_author_fields(crossref, sti) self.assertEqual(matches, res) matches = author_match.match_ads_author_fields(crossref, sti, impl='np') self.assertEqual(matches, res)