def test_nqueries(self): from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() jan, moest, piet, slaan, volgens, kees, omte, marie, helpen = [ amcattest.create_test_token(sentence=s, position=i) for i in range(1,10)] with self.checkMaxQueries(1): s._get_tokens(get_words=True) for child, parent, rel in [(jan, moest, "su"), (jan, slaan, "su"), (moest, slaan, "vc"), (piet, slaan, "obj1"), (volgens, slaan, "mod"), (kees, volgens, "obj1"), (omte, slaan, "om"), (helpen, omte, "body"), (marie, helpen, "obj1"), ]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) roles = ((jan.position, "su", slaan.position), (piet.position, "obj", slaan.position), (kees.position, "quote", moest.position)) from amcat.tools.djangotoolkit import list_queries with self.checkMaxQueries(3): statements = set(get_statements(s, roles)) with self.checkMaxQueries(0): s = str(statements)
def test_nqueries(self): from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() jan, moest, piet, slaan, volgens, kees, omte, marie, helpen = [ amcattest.create_test_token(sentence=s, position=i) for i in range(1,10)] with self.checkMaxQueries(1): s._get_tokens(get_words=True) for child, parent, rel in [(jan, moest, "su"), (jan, slaan, "su"), (moest, slaan, "vc"), (piet, slaan, "obj1"), (volgens, slaan, "mod"), (kees, volgens, "obj1"), (omte, slaan, "om"), (helpen, omte, "body"), (marie, helpen, "obj1"), ]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) roles = ((jan.position, "su", slaan.position), (piet.position, "obj", slaan.position), (kees.position, "quote", moest.position)) from amcat.tools.djangotoolkit import list_queries with self.checkMaxQueries(1): statements = set(get_statements(s, roles)) with self.checkMaxQueries(0): s = str(statements)
def test_fill_out_and_predicate(self): from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() de, liberale, premier, moest, piet, een, klap, geven = [ amcattest.create_test_token(sentence=s, position=i) for i in range(1, 9) ] for child, parent, rel in [(premier, geven, "su"), (premier, moest, "su"), (geven, moest, "vc"), (de, premier, "det"), (liberale, premier, "mod"), (piet, geven, "obj2"), (klap, geven, "obj1"), (een, klap, "det")]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) roles = ((premier.position, "su", geven.position), (piet.position, "obj", geven.position)) self.assertEqual(fill_out(s, [premier], roles), {de, liberale, premier}) predicate = fill_out(s, [moest, geven], roles) self.assertEqual(predicate, {moest, een, klap, geven}) predicate_paths = list(get_predicate_structure(s, predicate)) self.assertEqual(predicate_paths, [[een, klap, geven, moest]])
def test_get_tokens_order(self): s = amcattest.create_test_analysis_sentence() t1, t2, t3 = [ amcattest.create_test_token(sentence=s, position=i) for i in [2, 1, 3] ] self.assertEqual(list(s.tokens.all()), [t2, t1, t3])
def _get_test_tokens(self, aa, words): s = amcattest.create_test_analysis_sentence(analysed_article=aa) if not words: words = "abcde" return [ amcattest.create_test_token( sentence=s, position=i, word=amcattest.create_test_word(word=w)) for (i, w) in enumerate(words) ]
def todo_test_statements(self): # jan moest piet slaan, volgens kees, om marie te helpen from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() jan, moest, piet, slaan, volgens, kees, omte, marie, helpen = [ amcattest.create_test_token(sentence=s, position=i) for i in range(1, 10) ] for child, parent, rel in [ (jan, moest, "su"), (jan, slaan, "su"), (moest, slaan, "vc"), (piet, slaan, "obj1"), (volgens, slaan, "mod"), (kees, volgens, "obj1"), (omte, slaan, "om"), (helpen, omte, "body"), (marie, helpen, "obj1"), ]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) roles = ((jan.position, "su", slaan.position), (piet.position, "obj", slaan.position), (kees.position, "quote", moest.position)) direct = {Statement(s, {jan}, {moest, slaan}, {piet}, source={kees})} statements = set(get_statements(s, roles)) self.assertEqual(statements, direct) # om marie te helpen roles += ((marie.position, "obj", helpen.position), ) statements = set(get_statements(s, roles)) self.assertEqual(statements, direct) roles += ((moest.position, "om", helpen.position), ) om = { Statement(s, {jan}, {helpen}, {marie}, type={"Affective"}, source={kees}), Statement(s, {piet}, {helpen}, {marie}, source={jan, kees}, condition={moest, slaan}, type={"Causal"}), } statements = set(get_statements(s, roles)) self.assertEqual(statements, direct | om)
def test_predicates(self): from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() #jan moest piet slaan jan, wilde, piet, slaan = [amcattest.create_test_token(sentence=s, position=i) for i in range(1,5)] for child, parent, rel in [(jan, moest, "su"), (jan, slaan, "su"), (moest, slaan, "vc"), (piet, slaan, "obj1")]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) preds = get_predicates(s) self.assertEqual(preds, {moest : {moest, slaan}, slaan : {moest, slaan}})
def todo_test_predicates(self): from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() #jan moest piet slaan jan, moest, piet, slaan = [amcattest.create_test_token(sentence=s, position=i) for i in range(1,5)] for child, parent, rel in [(jan, moest, "su"), (jan, slaan, "su"), (moest, slaan, "vc"), (piet, slaan, "obj1")]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) preds = get_predicates(s) self.assertEqual(preds, {moest : {moest, slaan}, slaan : {moest, slaan}})
def todo_test_statements(self): # jan moest piet slaan, volgens kees, om marie te helpen from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() jan, moest, piet, slaan, volgens, kees, omte, marie, helpen = [ amcattest.create_test_token(sentence=s, position=i) for i in range(1,10)] for child, parent, rel in [(jan, moest, "su"), (jan, slaan, "su"), (moest, slaan, "vc"), (piet, slaan, "obj1"), (volgens, slaan, "mod"), (kees, volgens, "obj1"), (omte, slaan, "om"), (helpen, omte, "body"), (marie, helpen, "obj1"), ]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) roles = ((jan.position, "su", slaan.position), (piet.position, "obj", slaan.position), (kees.position, "quote", moest.position)) direct = {Statement(s, {jan}, {moest, slaan}, {piet}, source={kees})} statements = set(get_statements(s, roles)) self.assertEqual(statements, direct) # om marie te helpen roles += ((marie.position, "obj", helpen.position), ) statements = set(get_statements(s, roles)) self.assertEqual(statements, direct) roles += ((moest.position, "om", helpen.position), ) om = {Statement(s, {jan}, {helpen}, {marie}, type={"Affective"}, source={kees}), Statement(s, {piet}, {helpen}, {marie}, source={jan, kees}, condition={moest, slaan}, type={"Causal"}), } statements = set(get_statements(s, roles)) self.assertEqual(statements, direct | om)
def test_reality(self): from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() # VVD stijgt (dwz in de peilingen) vvd, stijgt = [ amcattest.create_test_token(sentence=s, position=i) for i in range(1,3)] for child, parent, rel in [(vvd, stijgt, "su")]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) roles = ((None, "su", stijgt.position), (vvd.position, "obj", stijgt.position)) rea = {Statement({None}, {stijgt}, {vvd}, type={"Reality"})} statements = set(get_statements(s, roles)) self.assertEqual(statements, rea)
def test_reality(self): from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() # VVD stijgt (dwz in de peilingen) vvd, stijgt = [ amcattest.create_test_token(sentence=s, position=i) for i in range(1,3)] for child, parent, rel in [(vvd, stijgt, "su")]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) roles = ((None, "su", stijgt.position), (vvd.position, "obj", stijgt.position)) rea = {Statement(s, {None}, {stijgt}, {vvd}, type={"Reality"})} statements = set(get_statements(s, roles)) self.assertEqual(statements, rea)
def test_fill_out_and_predicate(self): from amcat.models import Triple, Relation s = amcattest.create_test_analysis_sentence() de, liberale,premier, moest, piet, een, klap, geven = [ amcattest.create_test_token(sentence=s, position=i) for i in range(1,9)] for child, parent, rel in [(premier, geven, "su"), (premier, moest, "su"), (geven, moest, "vc"), (de, premier, "det"), (liberale, premier, "mod"), (piet, geven, "obj2"), (klap, geven, "obj1"), (een, klap, "det")]: rel = Relation.objects.create(label=rel) Triple.objects.create(parent=parent, child=child, relation=rel) roles = ((premier.position, "su", geven.position), (piet.position, "obj", geven.position)) self.assertEqual(fill_out(s, [premier], roles), {de, liberale, premier}) predicate = fill_out(s, [moest, geven], roles) self.assertEqual(predicate, {moest, een, klap, geven}) predicate_paths = list(get_predicate_structure(s, predicate)) self.assertEqual(predicate_paths, [[een, klap, geven, moest]])
def _get_test_tokens(self, aa, words): s = amcattest.create_test_analysis_sentence(analysed_article=aa) if not words: words = "abcde" return [amcattest.create_test_token(sentence=s, position=i, word=amcattest.create_test_word(word=w)) for (i,w) in enumerate(words)]
def test_get_tokens_order(self): s = amcattest.create_test_analysis_sentence() t1,t2,t3 = [amcattest.create_test_token(sentence=s, position=i) for i in [2,1,3]] self.assertEqual(list(s.tokens.all()), [t2,t1,t3])