diff options
author | vng <viktor.govako@gmail.com> | 2016-03-24 03:41:01 +0300 |
---|---|---|
committer | vng <viktor.govako@gmail.com> | 2016-03-24 05:06:37 +0300 |
commit | c4cd806f652cc52b9a6c15ff20e021b493ba5322 (patch) | |
tree | b092d34fea53874680ac11f4d389b9019ae5b0da /search | |
parent | b37167c1a6cca7e4487868fa1cb773ea9103417d (diff) |
[search] Treat street synonyms as prefix in search algos.
Diffstat (limited to 'search')
-rw-r--r-- | search/house_detector.cpp | 2 | ||||
-rw-r--r-- | search/reverse_geocoder.cpp | 12 | ||||
-rw-r--r-- | search/reverse_geocoder.hpp | 5 | ||||
-rw-r--r-- | search/search_tests/house_detector_tests.cpp | 12 | ||||
-rw-r--r-- | search/v2/geocoder.cpp | 2 |
5 files changed, 14 insertions, 19 deletions
diff --git a/search/house_detector.cpp b/search/house_detector.cpp index 49072ee010..8ce620fb8f 100644 --- a/search/house_detector.cpp +++ b/search/house_detector.cpp @@ -287,7 +287,7 @@ double Street::GetPrefixLength(size_t numSegs) const void Street::SetName(string const & name) { m_name = name; - GetStreetNameAsKey(name, m_processedName); + m_processedName = strings::ToUtf8(GetStreetNameAsKey(name)); } namespace diff --git a/search/reverse_geocoder.cpp b/search/reverse_geocoder.cpp index bc30412ccc..7585521ff9 100644 --- a/search/reverse_geocoder.cpp +++ b/search/reverse_geocoder.cpp @@ -62,11 +62,9 @@ void ReverseGeocoder::GetNearbyStreets(FeatureType & ft, vector<Street> & street } // static -size_t ReverseGeocoder::GetMatchedStreetIndex(string const & keyName, +size_t ReverseGeocoder::GetMatchedStreetIndex(strings::UniString const & keyName, vector<Street> const & streets) { - strings::UniString const expected = strings::MakeUniString(keyName); - // Find the exact match or the best match in kSimilarityTresholdPercent limit. size_t const count = streets.size(); size_t result = count; @@ -74,12 +72,10 @@ size_t ReverseGeocoder::GetMatchedStreetIndex(string const & keyName, for (size_t i = 0; i < count; ++i) { - string key; - search::GetStreetNameAsKey(streets[i].m_name, key); - strings::UniString const actual = strings::MakeUniString(key); + strings::UniString const actual = search::GetStreetNameAsKey(streets[i].m_name); - size_t const editDistance = - strings::EditDistance(expected.begin(), expected.end(), actual.begin(), actual.end()); + size_t const editDistance = strings::EditDistance(keyName.begin(), keyName.end(), + actual.begin(), actual.end()); if (editDistance == 0) return i; diff --git a/search/reverse_geocoder.hpp b/search/reverse_geocoder.hpp index 3751a78f35..2984a888f6 100644 --- a/search/reverse_geocoder.hpp +++ b/search/reverse_geocoder.hpp @@ -4,6 +4,8 @@ #include "indexer/feature_decl.hpp" +#include "base/string_utils.hpp" + #include "std/string.hpp" #include "std/utility.hpp" #include "std/vector.hpp" @@ -58,7 +60,8 @@ public: } }; - static size_t GetMatchedStreetIndex(string const & keyName, vector<Street> const & streets); + static size_t GetMatchedStreetIndex(strings::UniString const & keyName, + vector<Street> const & streets); struct Address { diff --git a/search/search_tests/house_detector_tests.cpp b/search/search_tests/house_detector_tests.cpp index 38677ec996..d8e8a6e100 100644 --- a/search/search_tests/house_detector_tests.cpp +++ b/search/search_tests/house_detector_tests.cpp @@ -57,7 +57,7 @@ class CollectStreetIDs static bool GetKey(string const & name, string & key) { TEST(!name.empty(), ()); - search::GetStreetNameAsKey(name, key); + key = strings::ToUtf8(search::GetStreetNameAsKey(name)); if (key.empty()) { @@ -331,19 +331,15 @@ UNIT_TEST(HS_StreetsCompare) namespace { - string GetStreetKey(string const & name) { - string res; - search::GetStreetNameAsKey(name, res); - return res; -} - + return strings::ToUtf8(search::GetStreetNameAsKey(name)); } +} // namespace UNIT_TEST(HS_StreetKey) { - TEST_EQUAL("крупской", GetStreetKey("улица Крупской"), ()); + TEST_EQUAL("крупскои", GetStreetKey("улица Крупской"), ()); TEST_EQUAL("уручская", GetStreetKey("Уручская ул."), ()); TEST_EQUAL("газетыправда", GetStreetKey("Пр. Газеты Правда"), ()); TEST_EQUAL("якупалы", GetStreetKey("улица Я. Купалы"), ()); diff --git a/search/v2/geocoder.cpp b/search/v2/geocoder.cpp index a63bef7f04..a64c3cdb18 100644 --- a/search/v2/geocoder.cpp +++ b/search/v2/geocoder.cpp @@ -998,7 +998,7 @@ void Geocoder::GreedilyMatchStreets() for (; curToken < m_numTokens && !m_usedTokens[curToken]; ++curToken) { auto const & token = m_params.GetTokens(curToken).front(); - if (IsStreetSynonym(token)) + if (IsStreetSynonymPrefix(token)) continue; if (feature::IsHouseNumber(token)) |