diff --git a/.gitignore b/.gitignore index 2079f94..60c6135 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ data/samples/ src/frontend_vue/node_modules/ src/frontend_vue/dist/ dockerfiles/database/create.js +*__pycache__/ diff --git a/src/backend_flask/app.py b/src/backend_flask/app.py index bf2ee94..a5eddcb 100644 --- a/src/backend_flask/app.py +++ b/src/backend_flask/app.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from flask import Flask, render_template, request, url_for, redirect -from valency import Frame, Slot +from valency.Frame import Frame, Slot, frames_from_db_entry from valency.reduce_functions import reduce_functions """ @@ -39,6 +39,7 @@ CORPORA = ["ssj", "kres"] app_index = {c: {} for c in CORPORA} log = logging.getLogger(__name__) +valdb = None app = Flask(__name__) @@ -50,6 +51,18 @@ app = Flask(__name__) CORS(app) +# DEV -------------------------------. + +@app.route("/api/dev") +def api_dev(): + cur = valdb.kres.find({"sid": "F0015940.37.2"}) + frames = [] + for ent in cur: + frames += frames_from_db_entry(ent) + return json.dumps([x.to_json() for x in frames]) + +# DEV -------------------------------^ + # INDEX SELECTION -------------------. @app.route("/api/words/") diff --git a/src/pkg/valency/valency/Frame.py b/src/pkg/valency/valency/Frame.py index ea7c0c5..fceb0c8 100644 --- a/src/pkg/valency/valency/Frame.py +++ b/src/pkg/valency/valency/Frame.py @@ -2,10 +2,36 @@ import logging log = logging.getLogger(__name__) +def frames_from_db_entry(dbent): + def _full_tid(tid): + return ".".join([dbent["sid"], str(tid)]) + + frames = [] + if "srl_links" not in dbent: + return [] + srldict = {} + for srl in dbent["srl_links"]: + key = str(srl["from"]) + if key not in srldict: + srldict[key] = [srl] + else: + srldict[key] += [srl] + for hwtid, srlarr in srldict.items(): + frames += [Frame( + hw_lemma=_full_tid(hwtid), + tids=[_full_tid(x["to"]) for x in srlarr], + slots=[ + Slot( + functor=srl["afun"], + tids=[_full_tid(srl["to"])] + ) for srl in srlarr + ] + )] + return frames class Frame(): - def __init__(self, tids, deep_links=None, slots=None, hw=None): - self.hw = hw + def __init__(self, tids, deep_links=None, slots=None, hw_lemma=None): + self.hw = hw_lemma self.tids = tids # list of tokens with the same hw_lemma # Each tid = "S123.t123"; # you can get sentence with vallex.get_sentence(S123) @@ -33,7 +59,7 @@ class Frame(): slots = [] for link in deep: slots.append(Slot( - functor=link["functor"], + functor=link["afun"], tids=[link["to"]] )) return slots diff --git a/src/pkg/valency/valency/__init__.py b/src/pkg/valency/valency/__init__.py index 6a41c6a..e69de29 100644 --- a/src/pkg/valency/valency/__init__.py +++ b/src/pkg/valency/valency/__init__.py @@ -1 +0,0 @@ -from valency.Frame import Frame, Slot diff --git a/src/pkg/valency/valency/reduce_functions.py b/src/pkg/valency/valency/reduce_functions.py index f6f785a..397afd7 100644 --- a/src/pkg/valency/valency/reduce_functions.py +++ b/src/pkg/valency/valency/reduce_functions.py @@ -2,7 +2,7 @@ # Input: list of Frame objects, output: list of Frame objects. # App uses reduce_0, 1 and 5 -from valency import Frame, Slot +from valency.Frame import Frame, Slot from copy import deepcopy as DC import logging