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:
authorMaxim Pimenov <m@maps.me>2019-04-09 18:46:54 +0300
committerTatiana Yan <tatiana.kondakova@gmail.com>2019-04-10 18:15:35 +0300
commit38d0fb668602f9989a0ca74c0493da5d3bbf4690 (patch)
tree02a6fa9c7dbaa93a9bbdf7f6679649d1a54db422 /search
parentf5444d43d3ed5018ad4dcae20de427b11c1f8c85 (diff)
[search] [assessment-tool] Added Relevance::Harmful.
Diffstat (limited to 'search')
-rw-r--r--search/search_quality/assessment_tool/result_view.cpp8
-rw-r--r--search/search_quality/assessment_tool/result_view.hpp1
-rwxr-xr-xsearch/search_quality/gen-samples.lisp3
-rw-r--r--search/search_quality/sample.cpp16
-rw-r--r--search/search_quality/sample.hpp12
-rwxr-xr-xsearch/search_quality/scoring_model.py2
6 files changed, 34 insertions, 8 deletions
diff --git a/search/search_quality/assessment_tool/result_view.cpp b/search/search_quality/assessment_tool/result_view.cpp
index f8cdb6cb9b..d4e31f9397 100644
--- a/search/search_quality/assessment_tool/result_view.cpp
+++ b/search/search_quality/assessment_tool/result_view.cpp
@@ -127,6 +127,7 @@ void ResultView::Init()
auto * groupLayout = new QHBoxLayout(group /* parent */);
group->setLayout(groupLayout);
+ m_harmful = CreateRatioButton("Harmful", *groupLayout);
m_irrelevant = CreateRatioButton("Irrelevant", *groupLayout);
m_relevant = CreateRatioButton("Relevant", *groupLayout);
m_vital = CreateRatioButton("Vital", *groupLayout);
@@ -141,6 +142,7 @@ void ResultView::SetContents(string const & name, string const & type, string co
SetText(*m_type, type);
SetText(*m_address, address);
+ m_harmful->setChecked(false);
m_irrelevant->setChecked(false);
m_relevant->setChecked(false);
m_vital->setChecked(false);
@@ -161,7 +163,9 @@ void ResultView::OnRelevanceChanged()
return;
auto relevance = Relevance::Irrelevant;
- if (m_irrelevant->isChecked())
+ if (m_harmful->isChecked())
+ relevance = Relevance::Harmful;
+ else if (m_irrelevant->isChecked())
relevance = Relevance::Irrelevant;
else if (m_relevant->isChecked())
relevance = Relevance::Relevant;
@@ -176,6 +180,7 @@ void ResultView::UpdateRelevanceRadioButtons()
if (!m_editor)
return;
+ m_harmful->setChecked(false);
m_irrelevant->setChecked(false);
m_relevant->setChecked(false);
m_vital->setChecked(false);
@@ -187,6 +192,7 @@ void ResultView::UpdateRelevanceRadioButtons()
switch (*r)
{
+ case Relevance::Harmful: m_harmful->setChecked(true); break;
case Relevance::Irrelevant: m_irrelevant->setChecked(true); break;
case Relevance::Relevant: m_relevant->setChecked(true); break;
case Relevance::Vital: m_vital->setChecked(true); break;
diff --git a/search/search_quality/assessment_tool/result_view.hpp b/search/search_quality/assessment_tool/result_view.hpp
index f5cec97724..cfefe72755 100644
--- a/search/search_quality/assessment_tool/result_view.hpp
+++ b/search/search_quality/assessment_tool/result_view.hpp
@@ -44,6 +44,7 @@ private:
QLabel * m_type = nullptr;
QLabel * m_address = nullptr;
+ QRadioButton * m_harmful = nullptr;
QRadioButton * m_irrelevant = nullptr;
QRadioButton * m_relevant = nullptr;
QRadioButton * m_vital = nullptr;
diff --git a/search/search_quality/gen-samples.lisp b/search/search_quality/gen-samples.lisp
index a61fa6cd8b..4191e4adc6 100755
--- a/search/search_quality/gen-samples.lisp
+++ b/search/search_quality/gen-samples.lisp
@@ -78,6 +78,9 @@ exec /usr/bin/env sbcl --noinform --quit --load "$0" --end-toplevel-options "$@"
(defmacro irrelevant (&rest args)
`(make-result 'irrelevant ,@args))
+(defmacro harmful (&rest args)
+ `(make-result 'harmful ,@args))
+
(defclass sample ()
((query :initarg :query)
(locale :initarg :locale)
diff --git a/search/search_quality/sample.cpp b/search/search_quality/sample.cpp
index c43f4d85e3..18ca3c5880 100644
--- a/search/search_quality/sample.cpp
+++ b/search/search_quality/sample.cpp
@@ -196,12 +196,14 @@ void FromJSONObject(json_t * root, char const * field, Sample::Result::Relevance
{
string r;
FromJSONObject(root, field, r);
- if (r == "vital")
- relevance = search::Sample::Result::Relevance::Vital;
- else if (r == "relevant")
- relevance = search::Sample::Result::Relevance::Relevant;
+ if (r == "harmful")
+ relevance = search::Sample::Result::Relevance::Harmful;
else if (r == "irrelevant")
relevance = search::Sample::Result::Relevance::Irrelevant;
+ else if (r == "relevant")
+ relevance = search::Sample::Result::Relevance::Relevant;
+ else if (r == "vital")
+ relevance = search::Sample::Result::Relevance::Vital;
else
CHECK(false, ("Unknown relevance:", r));
}
@@ -213,9 +215,10 @@ void ToJSONObject(json_t & root, char const * field, Sample::Result::Relevance r
string r;
switch (relevance)
{
- case Relevance::Vital: r = "vital"; break;
- case Relevance::Relevant: r = "relevant"; break;
+ case Relevance::Harmful: r = "harmful"; break;
case Relevance::Irrelevant: r = "irrelevant"; break;
+ case Relevance::Relevant: r = "relevant"; break;
+ case Relevance::Vital: r = "vital"; break;
}
json_object_set_new(&root, field, json_string(r.c_str()));
@@ -255,6 +258,7 @@ string DebugPrint(Sample::Result::Relevance r)
{
switch (r)
{
+ case Sample::Result::Relevance::Harmful: return "Harmful";
case Sample::Result::Relevance::Irrelevant: return "Irrelevant";
case Sample::Result::Relevance::Relevant: return "Relevant";
case Sample::Result::Relevance::Vital: return "Vital";
diff --git a/search/search_quality/sample.hpp b/search/search_quality/sample.hpp
index 342dc7c947..e787ccab1e 100644
--- a/search/search_quality/sample.hpp
+++ b/search/search_quality/sample.hpp
@@ -24,8 +24,20 @@ struct Sample
{
enum class Relevance
{
+ // A result that should not be present and it's hard (for the user)
+ // to explain why it is there, i.e. it is a waste of time even
+ // to try to understand what this result is about.
+ Harmful,
+
+ // A result that is irrelevant to the query but at
+ // least it is easy to explain why it showed up.
Irrelevant,
+
+ // A result that is relevant to the query.
Relevant,
+
+ // A result that definetely should be present, preferably
+ // at a position close to the beginning.
Vital
};
diff --git a/search/search_quality/scoring_model.py b/search/search_quality/scoring_model.py
index dc2c04b8cc..ab010dfd64 100755
--- a/search/search_quality/scoring_model.py
+++ b/search/search_quality/scoring_model.py
@@ -17,7 +17,7 @@ import sys
MAX_DISTANCE_METERS = 2e6
MAX_RANK = 255
MAX_POPULARITY = 255
-RELEVANCES = {'Irrelevant': 0, 'Relevant': 1, 'Vital': 3}
+RELEVANCES = {'Harmful': -3, 'Irrelevant': 0, 'Relevant': 1, 'Vital': 3}
NAME_SCORES = ['Zero', 'Substring', 'Prefix', 'Full Match']
SEARCH_TYPES = ['POI', 'Building', 'Street', 'Unclassified', 'Village', 'City', 'State', 'Country']
FEATURES = ['DistanceToPivot', 'Rank', 'Popularity', 'FalseCats', 'ErrorsMade', 'AllTokensUsed',