Commit 04706a8a authored by delanoe's avatar delanoe

[FEAT] Adding NodeHyperdataNgram table

parent 4532e8c6
from collections import defaultdict from collections import defaultdict
from math import sqrt from math import sqrt
from gargantext_web.db import session, NodeNgram, NodeNgramNgram, bulk_insert from gargantext_web.db import session, NodeNgram, NodeNgramNgram, NodeHyperdataNgram, bulk_insert
class BaseClass: class BaseClass:
...@@ -134,10 +134,21 @@ class WeightedMatrix(BaseClass): ...@@ -134,10 +134,21 @@ class WeightedMatrix(BaseClass):
if other is None: if other is None:
self.items = defaultdict(lambda: defaultdict(float)) self.items = defaultdict(lambda: defaultdict(float))
elif isinstance(other, int): elif isinstance(other, int):
query = (session self.hyperdata = session.query(Node.hyperdata).filter(Node.id==other)
.query(NodeNgramNgram.ngramx_id, NodeNgramNgram.ngramy_id, NodeNgramNgram.score) self.hyperdata['field1'] = self.hyperdata.get('field1', 'ngrams')
.filter(NodeNgramNgram.node_id == other) self.hyperdata['field2'] = self.hyperdata.get('field2', 'ngrams')
)
if self.hyperdata['field1'] == self.hyperdata['field2'] == 'ngrams':
query = (session
.query(NodeNgramNgram.ngramx_id, NodeNgramNgram.ngramy_id, NodeNgramNgram.score)
.filter(NodeNgramNgram.node_id == other)
)
else:
query = (session
.query(NodeHyperdataNgram.hyperdata_id, NodeHyperdataNgram.ngram_id, NodeHyperdataNgram.score)
.filter(NodeHyperdataNgram.node_id == other)
)
self.items = defaultdict(lambda: defaultdict(float)) self.items = defaultdict(lambda: defaultdict(float))
for key1, key2, value in self.items.items(): for key1, key2, value in self.items.items():
self.items[key1][key2] = value self.items[key1][key2] = value
...@@ -159,14 +170,24 @@ class WeightedMatrix(BaseClass): ...@@ -159,14 +170,24 @@ class WeightedMatrix(BaseClass):
def save(self, node_id): def save(self, node_id):
# delete previous data # delete previous data
session.query(NodeNgramNgram).filter(NodeNgramNgram.node_id == node_id).delete() if self.hyperdata['field1'] == self.hyperdata['field2'] == 'ngrams':
session.commit() session.query(NodeNgramNgram).filter(NodeNgramNgram.node_id == node_id).delete()
# insert new data session.commit()
bulk_insert( # insert new data
NodeNgramNgram, bulk_insert(
('node_id', 'ngramx_id', 'ngramy_id', 'score'), NodeNgramNgram,
((node_id, key1, key2, value) for key1, key2, value in self) ('node_id', 'ngramx_id', 'ngramy_id', 'score'),
) ((node_id, key1, key2, value) for key1, key2, value in self)
)
else:
session.query(NodeHyperdataNgram).filter(NodeHyperdataNgram.node_id == node_id).delete()
session.commit()
bulk_insert(
NodeHyperdataNgram,
('node_id', 'hyperdata_id', 'ngram_id', 'score'),
((node_id, key1, key2, value) for key1, key2, value in self)
)
def __radd__(self, other): def __radd__(self, other):
result = NotImplemented result = NotImplemented
......
...@@ -363,6 +363,17 @@ class NodeNgramNgram(models.Model): ...@@ -363,6 +363,17 @@ class NodeNgramNgram(models.Model):
def __str__(self): def __str__(self):
return "%s: %s / %s" % (self.node.name, self.ngramx.terms, self.ngramy.terms) return "%s: %s / %s" % (self.node.name, self.ngramx.terms, self.ngramy.terms)
class NodeHyperdataNgram(models.Model):
node = models.ForeignKey(Node, on_delete=models.CASCADE)
hyperdata_id = models.ForeignKey(Hyperdata, related_name="nodehyperdatamngramx", on_delete=models.CASCADE)
ngram_id = models.ForeignKey(Ngram, related_name="nodehyperdatangramy", on_delete=models.CASCADE)
score = models.FloatField(default=0)
def __str__(self):
return "%s: %s / %s" % (self.node.name, self.hyperdata_id.value_string, self.ngram_id.terms)
class NodeNodeNgram(models.Model): class NodeNodeNgram(models.Model):
nodex = models.ForeignKey(Node, related_name="nodex", on_delete=models.CASCADE) nodex = models.ForeignKey(Node, related_name="nodex", on_delete=models.CASCADE)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment