diff options
author | Sergey Yershov <syershov@maps.me> | 2019-03-11 12:09:58 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-11 12:09:58 +0300 |
commit | 3b54a319bf064f2b2cb6ca91f9470351b4a8cf8a (patch) | |
tree | 8107b599320c03f0ed255e06729f5ed5b158a044 /geocoder | |
parent | 1931f0f66d0312fa8c7379c7008c644dd039875d (diff) | |
parent | 03d318096baad2f2b735efb416180eeb2f6e89cd (diff) |
Merge pull request #10492 from cc-engineering/geocoder.no-locality-street-optimization
[geocoder] Optimize CPU: skip streets/buildings without locality
Diffstat (limited to 'geocoder')
-rw-r--r-- | geocoder/hierarchy.cpp | 13 | ||||
-rw-r--r-- | geocoder/hierarchy.hpp | 6 | ||||
-rw-r--r-- | geocoder/hierarchy_reader.cpp | 6 |
3 files changed, 24 insertions, 1 deletions
diff --git a/geocoder/hierarchy.cpp b/geocoder/hierarchy.cpp index d606f3459c..abccd07598 100644 --- a/geocoder/hierarchy.cpp +++ b/geocoder/hierarchy.cpp @@ -76,6 +76,19 @@ bool Hierarchy::Entry::DeserializeFromJSONImpl(json_t * const root, string const m_type = static_cast<Type>(i); } + auto const & subregion = m_address[static_cast<size_t>(Type::Subregion)]; + auto const & locality = m_address[static_cast<size_t>(Type::Locality)]; + if (m_type == Type::Street && locality.empty() && subregion.empty() /* if locality detection fail */) + { + ++stats.m_noLocalityStreets; + return false; + } + if (m_type == Type::Building && locality.empty() && subregion.empty() /* if locality detection fail */) + { + ++stats.m_noLocalityBuildings; + return false; + } + m_nameTokens.clear(); FromJSONObjectOptionalField(properties, "name", m_name); search::NormalizeAndTokenizeAsUtf8(m_name, m_nameTokens); diff --git a/geocoder/hierarchy.hpp b/geocoder/hierarchy.hpp index e4c92933cd..087f694074 100644 --- a/geocoder/hierarchy.hpp +++ b/geocoder/hierarchy.hpp @@ -41,6 +41,12 @@ public: // Number of entries without the name field or with an empty one. uint64_t m_emptyNames = 0; + // Number of street entries without a locality name. + uint64_t m_noLocalityStreets = 0; + + // Number of building entries without a locality name. + uint64_t m_noLocalityBuildings = 0; + // Number of entries whose names do not match the most // specific parts of their addresses. // This is expected from POIs but not from regions or streets. diff --git a/geocoder/hierarchy_reader.cpp b/geocoder/hierarchy_reader.cpp index ae734f97ef..f0f5f30c82 100644 --- a/geocoder/hierarchy_reader.cpp +++ b/geocoder/hierarchy_reader.cpp @@ -20,7 +20,7 @@ void operator+=(Hierarchy::ParsingStats & accumulator, Hierarchy::ParsingStats & struct ValidationStats { uint64_t m_numLoaded, m_badJsons, m_badOsmIds, m_duplicateOsmIds, m_duplicateAddresses, - m_emptyAddresses, m_emptyNames, m_mismatchedNames; + m_emptyAddresses, m_emptyNames, m_noLocalityStreets, m_noLocalityBuildings, m_mismatchedNames; }; static_assert(sizeof(Hierarchy::ParsingStats) == sizeof(ValidationStats), "Hierarchy::ParsingStats has been modified"); @@ -32,6 +32,8 @@ void operator+=(Hierarchy::ParsingStats & accumulator, Hierarchy::ParsingStats & accumulator.m_duplicateAddresses += stats.m_duplicateAddresses; accumulator.m_emptyAddresses += stats.m_emptyAddresses; accumulator.m_emptyNames += stats.m_emptyNames; + accumulator.m_noLocalityStreets += stats.m_noLocalityStreets; + accumulator.m_noLocalityBuildings += stats.m_noLocalityBuildings; accumulator.m_mismatchedNames += stats.m_mismatchedNames; } } // namespace @@ -82,6 +84,8 @@ Hierarchy HierarchyReader::Read(unsigned int readersCount) LOG(LINFO, ("Entries with duplicate address parts:", stats.m_duplicateAddresses)); LOG(LINFO, ("Entries without address:", stats.m_emptyAddresses)); LOG(LINFO, ("Entries without names:", stats.m_emptyNames)); + LOG(LINFO, ("Street entries without a locality name:", stats.m_noLocalityStreets)); + LOG(LINFO, ("Building entries without a locality name:", stats.m_noLocalityBuildings)); LOG(LINFO, ("Entries whose names do not match their most specific addresses:", stats.m_mismatchedNames)); LOG(LINFO, ("(End of stats.)")); |