forked from kristjan/cjvt-valency
backend: added sentence_count to limit displayed sentences in frontend
This commit is contained in:
parent
bf0970a90a
commit
910955abb8
|
@ -37,7 +37,8 @@ def frames_from_db_entry(dbent):
|
||||||
return frames
|
return frames
|
||||||
|
|
||||||
class Frame():
|
class Frame():
|
||||||
def __init__(self, tids, deep_links=None, slots=None, hw_lemma=None, sentences=None):
|
def __init__(self, tids, deep_links=None, slots=None,
|
||||||
|
hw_lemma=None, sentences=None, sentence_count=None):
|
||||||
self.hw = hw_lemma
|
self.hw = hw_lemma
|
||||||
self.tids = tids # list of tokens with the same hw_lemma
|
self.tids = tids # list of tokens with the same hw_lemma
|
||||||
# Each tid = "S123.t123";
|
# Each tid = "S123.t123";
|
||||||
|
@ -50,6 +51,8 @@ class Frame():
|
||||||
self.sense_info = {}
|
self.sense_info = {}
|
||||||
self.sentences = sentences
|
self.sentences = sentences
|
||||||
self.aggr_sent = None # Dictionary { hw: self.sentences idx }
|
self.aggr_sent = None # Dictionary { hw: self.sentences idx }
|
||||||
|
self.sentence_count = sentence_count # paging, optimization
|
||||||
|
|
||||||
|
|
||||||
def get_functors(self):
|
def get_functors(self):
|
||||||
return [slot.functor for slot in self.slots]
|
return [slot.functor for slot in self.slots]
|
||||||
|
@ -62,7 +65,8 @@ class Frame():
|
||||||
"slots": [slot.to_json() for slot in self.slots],
|
"slots": [slot.to_json() for slot in self.slots],
|
||||||
"sentences": self.sentences,
|
"sentences": self.sentences,
|
||||||
"aggr_sent": self.aggr_sent,
|
"aggr_sent": self.aggr_sent,
|
||||||
"sense_info": self.sense_info
|
"sense_info": self.sense_info,
|
||||||
|
"sentence_count": self.sentence_count
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
|
@ -1,96 +0,0 @@
|
||||||
import logging
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
class Frame():
|
|
||||||
def __init__(self, tids, deep_links=None, slots=None, hw=None):
|
|
||||||
self.hw = hw
|
|
||||||
self.tids = tids # list of tokens with the same hw_lemma
|
|
||||||
# Each tid = "S123.t123";
|
|
||||||
# you can get sentence with vallex.get_sentence(S123)
|
|
||||||
self.slots = []
|
|
||||||
if slots is None:
|
|
||||||
self.slots = self.init_slots(deep_links)
|
|
||||||
else:
|
|
||||||
self.slots = slots
|
|
||||||
self.sense_info = {}
|
|
||||||
self.sentences = None # Used for passing to view in app.py, get_frames
|
|
||||||
self.aggr_sent = None # Dictionary { hw: self.sentences idx }
|
|
||||||
|
|
||||||
def to_json(self):
|
|
||||||
ret = {
|
|
||||||
"hw": self.hw,
|
|
||||||
"tids": self.tids,
|
|
||||||
"slots": [slot.to_json() for slot in self.slots],
|
|
||||||
"sentences": self.sentences,
|
|
||||||
"aggr_sent": self.aggr_sent,
|
|
||||||
"sense_info": self.sense_info
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def init_slots(self, deep):
|
|
||||||
slots = []
|
|
||||||
for link in deep:
|
|
||||||
slots.append(Slot(
|
|
||||||
functor=link["functor"],
|
|
||||||
tids=[link["to"]]
|
|
||||||
))
|
|
||||||
return slots
|
|
||||||
|
|
||||||
def sort_slots(self):
|
|
||||||
# ACT, PAT, alphabetically
|
|
||||||
srt1 = [
|
|
||||||
x for x in self.slots
|
|
||||||
if (x.functor == "ACT" or
|
|
||||||
x.functor == "PAT")
|
|
||||||
]
|
|
||||||
srt1 = sorted(srt1, key=lambda x: x.functor)
|
|
||||||
srt2 = [
|
|
||||||
x for x in self.slots
|
|
||||||
if (x.functor != "ACT" and
|
|
||||||
x.functor != "PAT")
|
|
||||||
]
|
|
||||||
srt2 = sorted(srt2, key=lambda x: x.functor)
|
|
||||||
self.slots = (srt1 + srt2)
|
|
||||||
|
|
||||||
def to_string(self):
|
|
||||||
ret = "Frame:\n"
|
|
||||||
ret += "sense_info: {}\n".format(str(self.sense_info))
|
|
||||||
ret += "tids: ["
|
|
||||||
for t in self.tids:
|
|
||||||
ret += (str(t) + ", ")
|
|
||||||
ret += "]\n"
|
|
||||||
if self.slots is not None:
|
|
||||||
ret += "slots:\n"
|
|
||||||
for sl in self.slots:
|
|
||||||
ret += (sl.to_string() + "\n")
|
|
||||||
return ret
|
|
||||||
|
|
||||||
|
|
||||||
class Slot():
|
|
||||||
# Each slot is identified by its functor (ACT, PAT, ...)
|
|
||||||
# It consists of different tokens.
|
|
||||||
def __init__(self, functor, tids=None, count=None):
|
|
||||||
self.functor = functor
|
|
||||||
self.tids = tids or [] # combining multiple sentences vertically
|
|
||||||
self.count = count or 1
|
|
||||||
|
|
||||||
def to_string(self):
|
|
||||||
ret = "---- Slot:\n"
|
|
||||||
ret += "functor: {}\n".format(self.functor)
|
|
||||||
ret += "tids: ["
|
|
||||||
for t in self.tids:
|
|
||||||
ret += (str(t) + ", ")
|
|
||||||
ret += "]\n"
|
|
||||||
ret += "]\n"
|
|
||||||
ret += "----\n"
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def to_json(self):
|
|
||||||
ret = {
|
|
||||||
"functor": self.functor,
|
|
||||||
"tids": self.tids,
|
|
||||||
"count": self.count
|
|
||||||
}
|
|
||||||
return ret
|
|
|
@ -9,6 +9,7 @@ import logging
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
SENSE_UNDEFINED = "nedefinirano"
|
SENSE_UNDEFINED = "nedefinirano"
|
||||||
|
SENTENCE_LIMIT = 10
|
||||||
|
|
||||||
## TIDI: use frame.py
|
## TIDI: use frame.py
|
||||||
## TODO: build a list of [Frame] with lists of [Slot]
|
## TODO: build a list of [Frame] with lists of [Slot]
|
||||||
|
@ -70,7 +71,10 @@ def reduce_1(frames, valdb_sensemap=None):
|
||||||
for functor in fs[0]:
|
for functor in fs[0]:
|
||||||
slots[functor] = Slot(functor=functor)
|
slots[functor] = Slot(functor=functor)
|
||||||
# Reduce slots from all frames. (Merge ACT from all frames, ...)
|
# Reduce slots from all frames. (Merge ACT from all frames, ...)
|
||||||
|
sentence_count = len(fs[1])
|
||||||
for frame in fs[1]:
|
for frame in fs[1]:
|
||||||
|
if len(tids) >= SENTENCE_LIMIT:
|
||||||
|
break
|
||||||
tids += frame.tids
|
tids += frame.tids
|
||||||
sentences += frame.sentences
|
sentences += frame.sentences
|
||||||
for sl in frame.slots:
|
for sl in frame.slots:
|
||||||
|
@ -78,8 +82,13 @@ def reduce_1(frames, valdb_sensemap=None):
|
||||||
slots_list = []
|
slots_list = []
|
||||||
for k, e in slots.items():
|
for k, e in slots.items():
|
||||||
slots_list.append(e)
|
slots_list.append(e)
|
||||||
# TODO does appending hw_lemma of first frame work for functor frames too?
|
rf = Frame(
|
||||||
rf = Frame(hw_lemma=fs[1][0].hw, tids=tids, slots=slots_list, sentences=sentences)
|
hw_lemma=fs[1][0].hw,
|
||||||
|
tids=tids,
|
||||||
|
slots=slots_list,
|
||||||
|
sentences=sentences,
|
||||||
|
sentence_count=sentence_count
|
||||||
|
)
|
||||||
rf.sort_slots()
|
rf.sort_slots()
|
||||||
ret_frames.append(rf)
|
ret_frames.append(rf)
|
||||||
return sorted_by_len_tids(ret_frames)
|
return sorted_by_len_tids(ret_frames)
|
||||||
|
@ -182,7 +191,11 @@ def frames_from_sense_ids(raw_frames, id_map):
|
||||||
tids = []
|
tids = []
|
||||||
reduced_slots = []
|
reduced_slots = []
|
||||||
sentences = []
|
sentences = []
|
||||||
|
|
||||||
|
sentence_count = len(frames)
|
||||||
for frame in frames:
|
for frame in frames:
|
||||||
|
if len(tids) >= SENTENCE_LIMIT:
|
||||||
|
break
|
||||||
tids += frame.tids
|
tids += frame.tids
|
||||||
sentences += frame.sentences
|
sentences += frame.sentences
|
||||||
for slot in frame.slots:
|
for slot in frame.slots:
|
||||||
|
@ -204,7 +217,8 @@ def frames_from_sense_ids(raw_frames, id_map):
|
||||||
hw_lemma="derp",
|
hw_lemma="derp",
|
||||||
tids=tids,
|
tids=tids,
|
||||||
slots=reduced_slots,
|
slots=reduced_slots,
|
||||||
sentences=sentences
|
sentences=sentences,
|
||||||
|
sentence_count=sentence_count,
|
||||||
)
|
)
|
||||||
id_map_entry = (
|
id_map_entry = (
|
||||||
id_map.get(tids[0]) or
|
id_map.get(tids[0]) or
|
||||||
|
|
Loading…
Reference in New Issue
Block a user