예제 #1
0
def test_basic_noun_verb():
    ball = DependencyTreeToken("chyou2", NOUN)
    go = DependencyTreeToken("dzou3", VERB)
    tree = DiGraph()
    tree.add_edge(ball, go, role=NOMINAL_SUBJECT)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("chyou2", "dzou3")
예제 #2
0
def test_adj_noun():
    truck = DependencyTreeToken("ka3 che1", NOUN)
    red = DependencyTreeToken("hung2 se4", ADJECTIVE)
    tree = DiGraph()
    tree.add_edge(red, truck, role=ADJECTIVAL_MODIFIER)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("hung2 se4", "ka3 che1")
예제 #3
0
def test_counting():
    three = DependencyTreeToken("san1", NUMERAL)
    clf = DependencyTreeToken("jr1", PARTICLE)
    dog = DependencyTreeToken("gou3", NOUN)
    tree = DiGraph()
    tree.add_edge(clf, dog, role=CLASSIFIER)
    tree.add_edge(three, dog, role=NUMERIC_MODIFIER)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("san1", "jr1", "gou3")
예제 #4
0
def test_direct_object():
    me = DependencyTreeToken("wo3", NOUN)
    drink = DependencyTreeToken("he1", VERB)
    juice = DependencyTreeToken("gwo3 jr1", NOUN)
    tree = DiGraph()
    tree.add_edge(me, drink, role=NOMINAL_SUBJECT)
    tree.add_edge(juice, drink, role=OBJECT)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("wo3", "he1", "gwo3 jr1")
예제 #5
0
def test_proper_noun_modified():
    near = DependencyTreeToken("fu4, jin4", NOUN)
    at = DependencyTreeToken("dzai4", ADPOSITION)
    ma = DependencyTreeToken("ma1", PROPER_NOUN)
    tree = DiGraph()
    tree.add_edge(at, ma, role=CASE_SPATIAL)
    tree.add_edge(near, ma, role=NOMINAL_MODIFIER)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("dzai4", "ma1", "fu4, jin4")
예제 #6
0
def test_possessives():
    me = DependencyTreeToken("wo3", NOUN)
    de = DependencyTreeToken("de", PARTICLE)
    truck = DependencyTreeToken("ka3 che1", NOUN)
    red = DependencyTreeToken("hung2 se4", ADJECTIVE)
    tree = DiGraph()
    tree.add_edge(de, me, role=CASE_POSSESSIVE)
    tree.add_edge(red, truck, role=ADJECTIVAL_MODIFIER)
    tree.add_edge(me, truck, role=NOMINAL_MODIFIER_POSSESSIVE)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("wo3", "de", "hung2 se4", "ka3 che1")
예제 #7
0
def test_indirect_object():
    me = DependencyTreeToken("wo3", NOUN)
    give = DependencyTreeToken("gei3", VERB)
    you = DependencyTreeToken("ni3", NOUN)
    book = DependencyTreeToken("shu1", NOUN)
    tree = DiGraph()
    tree.add_edge(me, give, role=NOMINAL_SUBJECT)
    tree.add_edge(book, give, role=OBJECT)
    tree.add_edge(you, give, role=INDIRECT_OBJECT)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("wo3", "gei3", "ni3", "shu1")
예제 #8
0
def test_proper_noun_possessive():
    ma = DependencyTreeToken("ma1", PROPER_NOUN)
    de = DependencyTreeToken("de", PARTICLE)
    dog = DependencyTreeToken("gou3", NOUN)
    black = DependencyTreeToken("hei1 se4", ADJECTIVE)
    tree = DiGraph()
    tree.add_edge(de, ma, role=CASE_POSSESSIVE)
    tree.add_edge(ma, dog, role=NOMINAL_MODIFIER_POSSESSIVE)
    tree.add_edge(black, dog, role=ADJECTIVAL_MODIFIER)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("ma1", "de", "hei1 se4", "gou3")
예제 #9
0
def test_long_localizer_phrase():
    de = DependencyTreeToken("de", PARTICLE)
    truck = DependencyTreeToken("ka3 che1", NOUN)
    red = DependencyTreeToken("hung2 se4", ADJECTIVE)
    three = DependencyTreeToken("san1", NUMERAL)
    clf = DependencyTreeToken("lyang4", PARTICLE)
    near = DependencyTreeToken("fu4, jin4", NOUN)
    at = DependencyTreeToken("dzai4", ADPOSITION)
    ma = DependencyTreeToken("ma1ma1", PROPER_NOUN)
    tree = DiGraph()
    tree.add_edge(at, truck, role=CASE_SPATIAL)
    tree.add_edge(near, truck, role=NOMINAL_MODIFIER)
    tree.add_edge(clf, truck, role=CLASSIFIER)
    tree.add_edge(three, truck, role=NUMERIC_MODIFIER)
    tree.add_edge(de, ma, role=CASE_POSSESSIVE)
    tree.add_edge(red, truck, role=ADJECTIVAL_MODIFIER)
    tree.add_edge(ma, truck, role=NOMINAL_MODIFIER_POSSESSIVE)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == (
        "dzai4",
        "ma1ma1",
        "de",
        "san1",
        "lyang4",
        "hung2 se4",
        "ka3 che1",
        "fu4, jin4",
    )
예제 #10
0
def test_adverb_mods():
    me = DependencyTreeToken("wo3", NOUN)
    give = DependencyTreeToken("gei3", VERB)
    you = DependencyTreeToken("ni3", NOUN)
    book = DependencyTreeToken("shu1", NOUN)
    slowly = DependencyTreeToken("man4 man", ADVERB)
    tree = DiGraph()
    tree.add_edge(me, give, role=NOMINAL_SUBJECT)
    tree.add_edge(book, give, role=OBJECT)
    tree.add_edge(you, give, role=INDIRECT_OBJECT)
    tree.add_edge(slowly, give, role=ADVERBIAL_MODIFIER)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("wo3", "man4 man", "gei3", "ni3", "shu1")
예제 #11
0
def test_preverbial_prep():
    me = DependencyTreeToken("wo3", NOUN)
    at = DependencyTreeToken("dzai4", ADPOSITION)
    table = DependencyTreeToken("jwo1 dz", NOUN)
    on = DependencyTreeToken("shang4", NOUN)
    eat = DependencyTreeToken("chr1", VERB)
    tree = DiGraph()
    tree.add_edge(at, table, role=CASE_SPATIAL)
    tree.add_edge(on, table, role=NOMINAL_MODIFIER)
    tree.add_edge(me, eat, role=NOMINAL_SUBJECT)
    tree.add_edge(table, eat, role=OBLIQUE_NOMINAL)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("wo3", "dzai4", "jwo1 dz", "shang4",
                                     "chr1")
예제 #12
0
def test_I_push_the_book_along_the_table():
    me = DependencyTreeToken("wo3", NOUN)
    book = DependencyTreeToken("shu1", NOUN)
    ba = DependencyTreeToken("ba3", PARTICLE)
    push = DependencyTreeToken("twei1", VERB)
    at = DependencyTreeToken("dau4", ADPOSITION)
    table = DependencyTreeToken("jwo1 dz", NOUN)
    on = DependencyTreeToken("shang4", NOUN)
    tree = DiGraph()
    tree.add_edge(ba, book, role=CASE_SPATIAL)
    tree.add_edge(book, push, role=OBLIQUE_NOMINAL)
    tree.add_edge(me, push, role=NOMINAL_SUBJECT)
    tree.add_edge(at, table, role=CASE_SPATIAL)
    tree.add_edge(on, table, role=NOMINAL_MODIFIER)
    # TODO: this is a bit of a hack since I'm not sure this really counts as an IO, but I'm not sure what to classify it as
    tree.add_edge(table, push, role=ADVERBIAL_CLAUSE_MODIFIER)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == (
        "wo3",
        "ba3",
        "shu1",
        "twei1",
        "dau4",
        "jwo1 dz",
        "shang4",
    )
예제 #13
0
def test_basic_noun():
    truck = DependencyTreeToken("ka3 che1", NOUN)
    tree = DiGraph()
    tree.add_node(truck)
    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_CHINESE_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("ka3 che1", )
예제 #14
0
def test_mom_put_the_ball_on_the_table():
    mom = DependencyTreeToken("Mom", NOUN)
    put = DependencyTreeToken("put", VERB)
    the_0 = DependencyTreeToken("the", DETERMINER)
    ball = DependencyTreeToken("ball", NOUN)
    on = DependencyTreeToken("on", ADPOSITION)
    the_1 = DependencyTreeToken("the", DETERMINER)
    table = DependencyTreeToken("table", NOUN)

    tree = DiGraph()
    tree.add_edge(mom, put, role=NOMINAL_SUBJECT)
    tree.add_edge(the_0, ball, role=DETERMINER_ROLE)
    tree.add_edge(ball, put, role=OBJECT)
    tree.add_edge(on, table, role=CASE_SPATIAL)
    tree.add_edge(the_1, table, role=DETERMINER_ROLE)
    tree.add_edge(table, put, role=OBLIQUE_NOMINAL)

    predicted_token_order = tuple(
        node.token
        for node in SIMPLE_ENGLISH_DEPENDENCY_TREE_LINEARIZER.linearize(
            DependencyTree(tree)).surface_token_order)
    assert predicted_token_order == ("Mom", "put", "the", "ball", "on", "the",
                                     "table")