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
path: root/search
diff options
context:
space:
mode:
authorvng <viktor.govako@gmail.com>2016-03-24 03:41:01 +0300
committervng <viktor.govako@gmail.com>2016-03-24 05:06:37 +0300
commitc4cd806f652cc52b9a6c15ff20e021b493ba5322 (patch)
treeb092d34fea53874680ac11f4d389b9019ae5b0da /search
parentb37167c1a6cca7e4487868fa1cb773ea9103417d (diff)
[search] Treat street synonyms as prefix in search algos.
Diffstat (limited to 'search')
-rw-r--r--search/house_detector.cpp2
-rw-r--r--search/reverse_geocoder.cpp12
-rw-r--r--search/reverse_geocoder.hpp5
-rw-r--r--search/search_tests/house_detector_tests.cpp12
-rw-r--r--search/v2/geocoder.cpp2
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))