File size: 2,544 Bytes
d30d906
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ff3e892
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d30d906
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import unittest

from core.query_data import (
    normalize_query_text,
    sanitize_description_queries,
    sanitize_query_rows,
)


class QueryDataTests(unittest.TestCase):
    def test_normalization(self):
        self.assertEqual(normalize_query_text("  잔고   조회? "), "잔고 조회")

    def test_conflicting_queries_are_dropped(self):
        rows = [
            {"query": "잔고 조회", "menu_id": "SCR_1"},
            {"query": "잔고 조회?", "menu_id": "SCR_2"},
            {"query": "미체결 확인", "menu_id": "SCR_3"},
        ]
        clean, stats = sanitize_query_rows(rows)
        self.assertEqual(
            clean,
            [{"query": "미체결 확인", "menu_id": "SCR_3"}],
        )
        self.assertEqual(stats["conflicting"], 2)

    def test_held_out_and_duplicates_are_dropped(self):
        rows = [
            {"query": "OTP 등록", "menu_id": "SCR_1"},
            {"query": "OTP 등록", "menu_id": "SCR_1"},
            {"query": "환전하기", "menu_id": "SCR_2"},
        ]
        clean, stats = sanitize_query_rows(
            rows,
            excluded_queries={"환전하기"},
        )
        self.assertEqual(len(clean), 1)
        self.assertEqual(stats["duplicate"], 1)
        self.assertEqual(stats["held_out"], 1)

    def test_explicitly_shared_queries_are_retained_for_multiple_menus(self):
        rows = [
            {
                "query": "내 계좌 보여줘",
                "menu_id": "SCR_1300",
                "allow_shared_query": True,
            },
            {
                "query": "내 계좌 보여줘",
                "menu_id": "SCR_3075",
                "allow_shared_query": True,
            },
        ]

        clean, stats = sanitize_query_rows(rows)

        self.assertEqual(len(clean), 2)
        self.assertEqual(stats["conflicting"], 0)
        self.assertEqual(stats["shared_conflicting_texts"], 1)

    def test_description_source_is_not_mutated(self):
        source = [
            {"menu_id": "SCR_1", "sample_queries": ["잔고 조회", "OTP 등록"]},
            {"menu_id": "SCR_2", "sample_queries": ["잔고 조회"]},
        ]
        clean, stats = sanitize_description_queries(source)
        self.assertEqual(source[0]["sample_queries"], ["잔고 조회", "OTP 등록"])
        self.assertEqual(clean[0]["sample_queries"], ["OTP 등록"])
        self.assertEqual(clean[1]["sample_queries"], [])
        self.assertEqual(stats["removed_conflicting"], 2)


if __name__ == "__main__":
    unittest.main()