public void DoWork() { try { collaborations_byCity = new CollaborationMatrix(); collaborations_byCountry = new CollaborationMatrix(); collaborations_byInstitution = new CollaborationMatrix(); FieldsExtractor extractor = new FieldsExtractor(publicationsFile.Type); foreach (Publication publication in publicationsFile.publications) { AddCollaborations(collaborations_byCity, extractor.GetCities(publication)); AddCollaborations(collaborations_byCountry, extractor.GetCountries(publication)); AddCollaborations(collaborations_byInstitution, extractor.GetInstitutions(publication)); } statistics = new Statistics(); foreach (Publication publication in publicationsFile.publications) { string country = extractor.GetCountry(publication); string journal = extractor.GetJournal(publication); if (country != null) { GeoCodedLocation geoCodedCountry = geoCoding.GeoCode_OrNull(country); if (geoCodedCountry != null) { statistics.AddPublicationInCountry(geoCodedCountry); if (journal != null) { statistics.AddJournalInCountry(geoCodedCountry, journal); } } } } geoCoding.LogTotals(); logger.Info("Done"); } catch (Exception e) { logger.Error(e, "Error while doing work."); throw; } }
private void AddCollaborations(CollaborationMatrix addTo, List <FieldsExtractor.ParsedLocation> extractedLocations) { List <GeoCodedLocation> publicationCitiesResolved = extractedLocations.Select( x => { GeoCodedLocation loc = geoCoding.GeoCode_OrNull(x.NameForGeocoding); if (loc != null) { loc = new GeoCodedLocation(loc.lat, loc.lon, x.AdditionalNamePrefix + loc.normalizedName); } return(loc); } ).Where(x => x != null).Distinct().ToList(); for (int i = 0; i < publicationCitiesResolved.Count; ++i) { for (int j = i + 1; j < publicationCitiesResolved.Count; ++j) { addTo.AddConnection(publicationCitiesResolved[i], publicationCitiesResolved[j]); } } }