Commit 04706a8a authored by delanoe's avatar delanoe

[FEAT] Adding NodeHyperdataNgram table

parent 4532e8c6
from collections import defaultdict
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:
......@@ -134,10 +134,21 @@ class WeightedMatrix(BaseClass):
if other is None:
self.items = defaultdict(lambda: defaultdict(float))
elif isinstance(other, int):
query = (session
.query(NodeNgramNgram.ngramx_id, NodeNgramNgram.ngramy_id, NodeNgramNgram.score)
.filter(NodeNgramNgram.node_id == other)
)
self.hyperdata = session.query(Node.hyperdata).filter(Node.id==other)
self.hyperdata['field1'] = self.hyperdata.get('field1', 'ngrams')
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))
for key1, key2, value in self.items.items():
self.items[key1][key2] = value
......@@ -159,14 +170,24 @@ class WeightedMatrix(BaseClass):
def save(self, node_id):
# delete previous data
session.query(NodeNgramNgram).filter(NodeNgramNgram.node_id == node_id).delete()
session.commit()
# insert new data
bulk_insert(
NodeNgramNgram,
('node_id', 'ngramx_id', 'ngramy_id', 'score'),
((node_id, key1, key2, value) for key1, key2, value in self)
)
if self.hyperdata['field1'] == self.hyperdata['field2'] == 'ngrams':
session.query(NodeNgramNgram).filter(NodeNgramNgram.node_id == node_id).delete()
session.commit()
# insert new data
bulk_insert(
NodeNgramNgram,
('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):
result = NotImplemented
......
......@@ -363,6 +363,17 @@ class NodeNgramNgram(models.Model):
def __str__(self):
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):
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