コード例 #1
0
        protected override AddressMatchBuilder?DoMatchInternal(AddressMatchBuilder?results)
        {
            var municipalities = _latestQueries
                                 .GetAllLatestMunicipalities()
                                 .ToList();

            var municipalitiesByName = FilterByName(municipalities, results);

            var municipalitiesByNisCode = FilterByNisCode(municipalities, results);

            results?.AddMunicipalities(municipalitiesByName.Union(municipalitiesByNisCode));

            if (results.Distinct(new MunicipalityNameComparer()).Count() > 1)
            {
                _warnings.AddWarning("9", "Geen overeenkomst tussen 'Niscode' en 'Gemeentenaam'.");
            }

            if (!string.IsNullOrEmpty(results?.Query.PostalCode))
            {
                results
                .AddMunicipalitiesByPostalCode(
                    FilterByPostalCode(municipalities, results),
                    results.Query.PostalCode);
            }

            if (string.IsNullOrEmpty(results?.Query.MunicipalityName) || results.Any())
            {
                return(results);
            }

            var municipalitiesByPostalCode = FilterByPartOfMunicipality(municipalities, results)
                                             .GroupBy(municipalityPostCode => municipalityPostCode.Item1);

            foreach (var municipalitiesGroup in municipalitiesByPostalCode)
            {
                results.AddMunicipalitiesByPostalCode(
                    municipalitiesGroup
                    .Select(municipalityPostCode => municipalityPostCode.Item2),
                    municipalitiesGroup.Key);
            }

            if (results.Any())
            {
                return(results);
            }

            var municipalitiesByFuzzyMatch = municipalities
                                             .Where(municipality =>
                                                    !string.IsNullOrWhiteSpace(municipality.NameDutchSearch) && municipality.NameDutchSearch.EqFuzzyMatch(results.Query.MunicipalityName, _config.FuzzyMatchThreshold) ||
                                                    !string.IsNullOrWhiteSpace(municipality.NameFrenchSearch) && municipality.NameFrenchSearch.EqFuzzyMatch(results.Query.MunicipalityName, _config.FuzzyMatchThreshold) ||
                                                    !string.IsNullOrWhiteSpace(municipality.NameGermanSearch) && municipality.NameGermanSearch.EqFuzzyMatch(results.Query.MunicipalityName, _config.FuzzyMatchThreshold) ||
                                                    !string.IsNullOrWhiteSpace(municipality.NameEnglishSearch) && municipality.NameEnglishSearch.EqFuzzyMatch(results.Query.MunicipalityName, _config.FuzzyMatchThreshold));

            results.AddMunicipalities(municipalitiesByFuzzyMatch);

            return(results);
        }
コード例 #2
0
        protected override AddressMatchBuilder DoMatchInternal(AddressMatchBuilder results)
        {
            if (!string.IsNullOrEmpty(results.Query.KadStreetNameCode))
            {
                FindStreetNamesByKadStreetCode(results);
            }

            if (!string.IsNullOrEmpty(results.Query.RrStreetCode) && !string.IsNullOrEmpty(results.Query.PostalCode))
            {
                FindStreetNamesByRrStreetCode(results);
            }

            if (!string.IsNullOrEmpty(results.Query.StreetName))
            {
                Dictionary <string, List <StreetNameLatestItem> > municipalityWithStreetNames =
                    _latestQueries.GetLatestStreetNamesBy(results.Select(g => g.Name).ToArray()).GroupBy(s => s.NisCode).ToDictionary(g => g.Key, g => g.ToList());

                FindStreetNamesByName(results, municipalityWithStreetNames);

                if (!IsValidMatch(results))
                {
                    FindStreetNamesByNameToggleAbreviations(results, municipalityWithStreetNames);
                }
                if (!IsValidMatch(results))
                {
                    FindStreetNamesByFuzzyMatch(results, municipalityWithStreetNames);
                }
                if (!IsValidMatch(results))
                {
                    FindStreetNamesByFuzzyMatchToggleAbreviations(results, municipalityWithStreetNames);
                }
                if (!IsValidMatch(results) && results.Query.StreetName.Length > 3)
                {
                    FindStreetNamesByStreetNameContainsInput(results, municipalityWithStreetNames);
                }
                if (!IsValidMatch(results) && results.Query.StreetName.Length > 3)
                {
                    FindStreetNamesByInputContainsStreetName(results, municipalityWithStreetNames);
                }
            }

            if (!IsValidMatch(results))
            {
                _warnings.AddWarning("10", "'Straatnaam' niet interpreteerbaar.");
                //foreach (var gemeente in results)
                //    _telemetry.TrackStraatnaamMatch(gemeente.Naam, results.Query.Straatnaam, results.Query.KadStraatcode, results.Query.RrStraatcode, 0, (int)StraatnaamMatchLevel.NoMatch);
            }
            else if (results.AllStreetNames().Count() > _config.MaxStreetNamesThreshold)
            {
                _warnings.AddWarning("100", "Uw zoekopdracht is te generiek");
                results.ClearAllStreetNames();
            }

            return(results);
        }
コード例 #3
0
        protected override AddressMatchBuilder?DoMatchInternal(AddressMatchBuilder?builder)
        {
            if (string.IsNullOrEmpty(builder?.Query.HouseNumber) || string.IsNullOrEmpty(builder?.Query.RrStreetCode))
            {
                return(builder);
            }

            var rrAddresses = _kadRrService
                              .GetAddressesBy(
                builder.Query.HouseNumber,
                builder.Query.Index,
                builder.Query.RrStreetCode,
                builder.Query.PostalCode)
                              .ToList();

            if (!rrAddresses.Any())
            {
                return(builder);
            }

            _warnings.AddWarning("21", "De adressen in het resultaat werden gevonden via een rechtstreekse link naar het opgegeven rijksregister adres.");
            builder.AddRrAddresses(rrAddresses);

            return(builder);
        }
コード例 #4
0
        protected override AddressMatchBuilder DoMatchInternal(AddressMatchBuilder results)
        {
            var municipalities = _latestQueries.GetAllLatestMunicipalities().ToList();

            var municipalitiesByName = FilterByName(municipalities, results);

            var municipalitiesByNisCode = FilterByNisCode(municipalities, results);

            results.AddMunicipalities(municipalitiesByName.Union(municipalitiesByNisCode));
            if (results.Count() > 1)
            {
                _warnings.AddWarning("9", "Geen overeenkomst tussen 'Niscode' en 'Gemeentenaam'.");
            }

            if (!string.IsNullOrEmpty(results.Query.PostalCode))
            {
                results.AddMunicipalitiesByPostalCode(FilterByPostalcode(municipalities, results), results.Query.PostalCode);
            }

            if (!string.IsNullOrEmpty(results.Query.MunicipalityName) && !results.Any())
            {
                var municipalitiesByPostalCode = FilterByPartOfMunicipality(municipalities, results)
                                                 .GroupBy(municipalityPostCode => municipalityPostCode.Item1);

                foreach (var municipalitiesGroup in municipalitiesByPostalCode)
                {
                    results.AddMunicipalitiesByPostalCode(municipalitiesGroup.Select(municipalityPostCode => municipalityPostCode.Item2), municipalitiesGroup.Key);
                }

                if (!results.Any())
                {
                    var municipalitiesByFuzzyMatch = municipalities.Where(g => g.DefaultName.Value.EqFuzzyMatch(results.Query.MunicipalityName, _config.FuzzyMatchThreshold));
                    results.AddMunicipalities(municipalitiesByFuzzyMatch);
                }
            }

            //_telemetry.TrackGemeenteMatch(results.Query.Gemeentenaam, results.Query.Niscode, results.Query.Postcode, results.Count());

            return(results);
        }
コード例 #5
0
 protected override AddressMatchBuilder DoMatchInternal(AddressMatchBuilder builder)
 {
     if (!string.IsNullOrEmpty(builder.Query.HouseNumber) && !string.IsNullOrEmpty(builder.Query.RrStreetCode))
     {
         IEnumerable <AddressDetailItem> rrAddresses = _kadRrService.GetAddressesBy(builder.Query.HouseNumber, builder.Query.Index, builder.Query.RrStreetCode, builder.Query.PostalCode).ToList();
         if (rrAddresses.Any())
         {
             builder.AddRrAddresses(rrAddresses);
             _warnings.AddWarning("21", "De adressen in het resultaat werden gevonden via een rechtstreekse link naar het opgegeven rijksregister adres.");
         }
     }
     return(builder);
 }
コード例 #6
0
        protected override AddressMatchBuilder?DoMatchInternal(AddressMatchBuilder?results)
        {
            if (!string.IsNullOrEmpty(results?.Query.KadStreetNameCode))
            {
                FindStreetNamesByKadStreetCode(results);
            }

            if (!string.IsNullOrEmpty(results?.Query.RrStreetCode) && !string.IsNullOrEmpty(results.Query.PostalCode))
            {
                FindStreetNamesByRrStreetCode(results);
            }

            if (!string.IsNullOrEmpty(results?.Query.StreetName))
            {
                var municipalityWithStreetNames =
                    _latestQueries
                    .GetLatestStreetNamesBy(
                        results
                        .Select(g => g.Name)
                        .ToArray())
                    .Where(s => s.NisCode != null)
                    .GroupBy(s => s.NisCode !)
                    .ToDictionary(g => g.Key, g => g.ToList());

                FindStreetNamesByName(results, municipalityWithStreetNames);

                var isValidStreetnameMatch = IsValidMatch(results);
                if (isValidStreetnameMatch.HasValue && !isValidStreetnameMatch.Value)
                {
                    FindStreetNamesByNameToggleAbreviations(results, municipalityWithStreetNames);
                }

                isValidStreetnameMatch = IsValidMatch(results);
                if (isValidStreetnameMatch.HasValue && !isValidStreetnameMatch.Value)
                {
                    FindStreetNamesByFuzzyMatch(results, municipalityWithStreetNames);
                }

                isValidStreetnameMatch = IsValidMatch(results);
                if (isValidStreetnameMatch.HasValue && !isValidStreetnameMatch.Value)
                {
                    FindStreetNamesByFuzzyMatchToggleAbreviations(results, municipalityWithStreetNames);
                }

                isValidStreetnameMatch = IsValidMatch(results);
                if (isValidStreetnameMatch.HasValue && !isValidStreetnameMatch.Value && results.Query.StreetName.Length > 3)
                {
                    FindStreetNamesByStreetNameContainsInput(results, municipalityWithStreetNames);
                }

                isValidStreetnameMatch = IsValidMatch(results);
                if (isValidStreetnameMatch.HasValue && !isValidStreetnameMatch.Value && results.Query.StreetName.Length > 3)
                {
                    FindStreetNamesByInputContainsStreetName(results, municipalityWithStreetNames);
                }
            }

            var validMatch = IsValidMatch(results);

            if (validMatch.HasValue && !validMatch.Value)
            {
                _warnings.AddWarning("10", "'Straatnaam' niet interpreteerbaar.");
            }
            else if (results?.AllStreetNames().Count() > _config.MaxStreetNamesThreshold)
            {
                _warnings.AddWarning("100", "Uw zoekopdracht is te generiek");
                results.ClearAllStreetNames();
            }

            return(results);
        }