Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Yershov <syershov@maps.me>2019-03-11 12:09:58 +0300
committerGitHub <noreply@github.com>2019-03-11 12:09:58 +0300
commit3b54a319bf064f2b2cb6ca91f9470351b4a8cf8a (patch)
tree8107b599320c03f0ed255e06729f5ed5b158a044 /geocoder
parent1931f0f66d0312fa8c7379c7008c644dd039875d (diff)
parent03d318096baad2f2b735efb416180eeb2f6e89cd (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.cpp13
-rw-r--r--geocoder/hierarchy.hpp6
-rw-r--r--geocoder/hierarchy_reader.cpp6
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.)"));