コード例 #1
0
ファイル: test_markup.py プロジェクト: wjnbreu/mindmeld
def test_load_group_nested(query_factory):
    """Tests loading a query with a nested entity group"""
    text = (
        "Order [{one|quantity} {large|size} {Tesora|product} with [{medium|size} "
        "{cream|option}|option] and [{medium|size} {sugar|option}|option]|product]"
    )

    processed_query = markup.load_query(text, query_factory)
    entities = processed_query.entities

    assert len(entities) == 7

    assert entities[0].text == "one"
    assert entities[0].entity.type == "quantity"
    assert entities[0].span == Span(6, 8)
    assert entities[0].parent == entities[2]

    assert entities[1].text == "large"
    assert entities[1].entity.type == "size"
    assert entities[1].span == Span(10, 14)
    assert entities[1].parent == entities[2]

    assert entities[2].text == "Tesora"
    assert entities[2].entity.type == "product"
    assert entities[2].span == Span(16, 21)
    assert entities[2].children == (entities[0], entities[1], entities[4], entities[6])

    assert entities[3].text == "medium"
    assert entities[3].entity.type == "size"
    assert entities[3].span == Span(28, 33)
    assert entities[3].parent == entities[4]

    assert entities[4].text == "cream"
    assert entities[4].entity.type == "option"
    assert entities[4].span == Span(35, 39)
    assert entities[4].parent == entities[2]
    assert entities[4].children == (entities[3],)

    assert entities[5].text == "medium"
    assert entities[5].entity.type == "size"
    assert entities[5].span == Span(45, 50)
    assert entities[5].parent == entities[6]

    assert entities[6].text == "sugar"
    assert entities[6].entity.type == "option"
    assert entities[6].span == Span(52, 56)
    assert entities[6].parent == entities[2]
    assert entities[6].children == (entities[5],)
コード例 #2
0
ファイル: test_markup.py プロジェクト: Deependra-dot/mindmeld
def test_load_groups(query_factory):
    """Tests loading a query with multiple top level entity groups"""
    text = (
        "Order [{one|quantity} {large|size} {Tesora|product} with "
        "[{medium|size} {cream|option}|option]|product] from "
        "[{Philz|store} in {Downtown Sunnyvale|location}|store]"
    )

    processed_query = markup.load_query(text, query_factory)
    entities = processed_query.entities

    assert len(entities) == 7

    assert entities[0].text == "one"
    assert entities[0].entity.type == "quantity"
    assert entities[0].span == Span(6, 8)
    assert entities[0].parent == entities[2]

    assert entities[1].text == "large"
    assert entities[1].entity.type == "size"
    assert entities[1].span == Span(10, 14)
    assert entities[1].parent == entities[2]

    assert entities[2].text == "Tesora"
    assert entities[2].entity.type == "product"
    assert entities[2].span == Span(16, 21)
    assert entities[2].children == (entities[0], entities[1], entities[4])

    assert entities[3].text == "medium"
    assert entities[3].entity.type == "size"
    assert entities[3].span == Span(28, 33)
    assert entities[3].parent == entities[4]

    assert entities[4].text == "cream"
    assert entities[4].entity.type == "option"
    assert entities[4].span == Span(35, 39)
    assert entities[4].parent == entities[2]
    assert entities[4].children == (entities[3],)

    assert entities[5].text == "Philz"
    assert entities[5].entity.type == "store"
    assert entities[5].span == Span(46, 50)
    assert entities[5].children == (entities[6],)

    assert entities[6].text == "Downtown Sunnyvale"
    assert entities[6].entity.type == "location"
    assert entities[6].span == Span(55, 72)
    assert entities[6].parent == entities[5]
コード例 #3
0
ファイル: test_markup.py プロジェクト: zwxalgorithm/mindmeld
def test_load_groups(query_factory):
    """Tests loading a query with multiple top level entity groups"""
    text = ('Order [{one|quantity} {large|size} {Tesora|product} with '
            '[{medium|size} {cream|option}|option]|product] from '
            '[{Philz|store} in {Downtown Sunnyvale|location}|store]')

    processed_query = markup.load_query(text, query_factory)
    entities = processed_query.entities

    assert len(entities) == 7

    assert entities[0].text == 'one'
    assert entities[0].entity.type == 'quantity'
    assert entities[0].span == Span(6, 8)
    assert entities[0].parent == entities[2]

    assert entities[1].text == 'large'
    assert entities[1].entity.type == 'size'
    assert entities[1].span == Span(10, 14)
    assert entities[1].parent == entities[2]

    assert entities[2].text == 'Tesora'
    assert entities[2].entity.type == 'product'
    assert entities[2].span == Span(16, 21)
    assert entities[2].children == (entities[0], entities[1], entities[4])

    assert entities[3].text == 'medium'
    assert entities[3].entity.type == 'size'
    assert entities[3].span == Span(28, 33)
    assert entities[3].parent == entities[4]

    assert entities[4].text == 'cream'
    assert entities[4].entity.type == 'option'
    assert entities[4].span == Span(35, 39)
    assert entities[4].parent == entities[2]
    assert entities[4].children == (entities[3], )

    assert entities[5].text == 'Philz'
    assert entities[5].entity.type == 'store'
    assert entities[5].span == Span(46, 50)
    assert entities[5].children == (entities[6], )

    assert entities[6].text == 'Downtown Sunnyvale'
    assert entities[6].entity.type == 'location'
    assert entities[6].span == Span(55, 72)
    assert entities[6].parent == entities[5]
コード例 #4
0
ファイル: test_core.py プロジェクト: zwxalgorithm/mindmeld
def test_nested_and_query_entity_equality():
    """Tests NestedEntity and QueryEntity equality operations"""
    entity_a = NestedEntity(('Entity', 'Entity', 'entity'), (Span(0, 5), ) * 3,
                            (Span(0, 0), ) * 3,
                            Entity('text', 'type', 'role', 'value', 'display'))
    entity_b = QueryEntity(('Entity', 'Entity', 'entity'), (Span(0, 5), ) * 3,
                           (Span(0, 0), ) * 3,
                           Entity('text', 'type', 'role', 'value', 'display'))

    assert entity_a == entity_b
    assert not entity_a != entity_b

    entity_a = NestedEntity(('Entity123', 'Entity', 'entity'),
                            (Span(0, 5), ) * 3, (Span(0, 0), ) * 3,
                            Entity('text', 'type', 'role', 'value', 'display'))
    entity_b = QueryEntity(('Entity', 'Entity', 'entity'), (Span(0, 5), ) * 3,
                           (Span(0, 0), ) * 3,
                           Entity('text', 'type', 'role', 'value', 'display'))

    assert not entity_a == entity_b
    assert entity_a != entity_b
コード例 #5
0
def test_dump_group_nested(query_factory):
    """Tests dumping a query with nested entity groups"""
    query_text = "Order one large Tesora with medium cream and medium sugar"

    query = query_factory.create_query(query_text)
    entities = [
        QueryEntity.from_query(query, Span(6, 8), entity_type="quantity"),
        QueryEntity.from_query(query, Span(10, 14), entity_type="size"),
        QueryEntity.from_query(query, Span(16, 21), entity_type="product"),
        QueryEntity.from_query(query, Span(28, 33), entity_type="size"),
        QueryEntity.from_query(query, Span(35, 39), entity_type="option"),
        QueryEntity.from_query(query, Span(45, 50), entity_type="size"),
        QueryEntity.from_query(query, Span(52, 56), entity_type="option"),
    ]
    entities[4] = entities[4].with_children((entities[3],))
    entities[6] = entities[6].with_children((entities[5],))
    entities[2] = entities[2].with_children(
        (entities[0], entities[1], entities[4], entities[6])
    )

    processed_query = ProcessedQuery(query, entities=entities)

    markup_text = (
        "Order [{one|quantity} {large|size} {Tesora|product} with [{medium|size} "
        "{cream|option}|option] and [{medium|size} {sugar|option}|option]|product]"
    )
    entity_text = (
        "Order {one|quantity} {large|size} {Tesora|product} with {medium|size} "
        "{cream|option} and {medium|size} {sugar|option}"
    )
    group_text = (
        "Order [one large Tesora with [medium "
        "cream|option] and [medium sugar|option]|product]"
    )

    assert markup.dump_query(processed_query) == markup_text
    assert markup.dump_query(processed_query, no_group=True) == entity_text
    assert markup.dump_query(processed_query, no_entity=True) == group_text
    assert (
        markup.dump_query(processed_query, no_group=True, no_entity=True) == query_text
    )
コード例 #6
0
ファイル: test_core.py プロジェクト: zwxalgorithm/mindmeld
def test_entity_string():
    """Tests string representation of entities"""
    entity = NestedEntity(('Entity', 'Entity', 'entity'), (Span(0, 5), ) * 3,
                          (Span(0, 0), ) * 3,
                          Entity('text', 'type', 'role', 'value', 'display'))
    assert str(entity) == "type:role 'Entity' 0-5"
コード例 #7
0
ファイル: test_core.py プロジェクト: zwxalgorithm/mindmeld
def test_span_iter():
    """Tests the __iter__ implementation for Span objects"""
    span = Span(3, 5)
    indexes = list(span)
    assert indexes == [3, 4, 5]
コード例 #8
0
def test_bootstrap_query_with_entities(query_factory):
    query_text = "Can I get one curry sauce with my rice ball with house salad"

    query = query_factory.create_query(query_text)
    entities = [
        QueryEntity.from_query(query,
                               Span(10, 12),
                               entity_type="sys_number",
                               role="quantity"),
        QueryEntity.from_query(query, Span(14, 24), entity_type="option"),
        QueryEntity.from_query(query, Span(34, 59), entity_type="dish"),
    ]
    entities[1] = entities[1].with_children((entities[0], ))
    entities[2] = entities[2].with_children((entities[1], ))
    confidence = {
        "domains": {
            "food": 0.95,
            "music": 0.05
        },
        "intents": {
            "get_comestibles": 0.99,
            "reorder": 0.01
        },
        "entities": [{
            "sys_number": 0.9
        }, {
            "option": 0.99
        }, {
            "dish": 0.65
        }],
        "roles": [{
            "quantity": 0.8,
            "quality": 0.2
        }, None, None],
    }

    processed_query = ProcessedQuery(
        query,
        domain="food",
        intent="get_comestibles",
        entities=entities,
        confidence=confidence,
    )
    bootstrap_data = markup.bootstrap_query_row(processed_query,
                                                show_confidence=True)

    expected_data = {
        "query":
        ("Can I get [[{one|sys_number|quantity} {curry sauce|option}|option] "
         "with my {rice ball with house salad|dish}|dish]"),
        "domain":
        "food",
        "domain_conf":
        0.95,
        "intent":
        "get_comestibles",
        "intent_conf":
        0.99,
        "entity_conf":
        0.65,
        "role_conf":
        0.8,
    }
    assert bootstrap_data == expected_data
コード例 #9
0
ファイル: test_markup.py プロジェクト: zwxalgorithm/mindmeld
def test_bootstrap_query_with_entities(query_factory):
    query_text = 'Can I get one curry sauce with my rice ball with house salad'

    query = query_factory.create_query(query_text)
    entities = [
        QueryEntity.from_query(query,
                               Span(10, 12),
                               entity_type='sys_number',
                               role='quantity'),
        QueryEntity.from_query(query, Span(14, 24), entity_type='option'),
        QueryEntity.from_query(query, Span(34, 59), entity_type='dish')
    ]
    entities[1] = entities[1].with_children((entities[0], ))
    entities[2] = entities[2].with_children((entities[1], ))
    confidence = {
        'domains': {
            'food': 0.95,
            'music': 0.05
        },
        'intents': {
            'get_comestibles': 0.99,
            'reorder': 0.01
        },
        'entities': [{
            'sys_number': 0.9
        }, {
            'option': 0.99
        }, {
            'dish': 0.65
        }],
        'roles': [{
            'quantity': 0.8,
            'quality': 0.2
        }, None, None]
    }

    processed_query = ProcessedQuery(query,
                                     domain='food',
                                     intent='get_comestibles',
                                     entities=entities,
                                     confidence=confidence)
    bootstrap_data = markup.bootstrap_query_row(processed_query,
                                                show_confidence=True)

    expected_data = {
        'query':
        ('Can I get [[{one|sys_number|quantity} {curry sauce|option}|option] '
         'with my {rice ball with house salad|dish}|dish]'),
        'domain':
        'food',
        'domain_conf':
        0.95,
        'intent':
        'get_comestibles',
        'intent_conf':
        0.99,
        'entity_conf':
        0.65,
        'role_conf':
        0.8
    }
    assert bootstrap_data == expected_data