Commit 0df9b00c authored by PkSM3's avatar PkSM3

Merge branch 'master' of ssh://delanoe.org:1979/gargantext into samuel

parents 64ac97bc 6c403f1f
This diff is collapsed.
# Without this, we couldn't use the Django environment
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "gargantext_web.settings")
os.environ.setdefault("DJANGO_HSTORE_GLOBAL_REGISTER", "False")
# We're gonna use all the models!
from node.models import *
# Node.objects.get(id=26514).children.all().make_metadata_filterable()
# exit()
# Reset: all data
tables_to_empty = [
Node,
Node_Metadata,
Metadata,
NodeType,
ResourceType,
Resource,
]
for table in tables_to_empty:
print('Empty table "%s"...' % (table._meta.db_table, ))
table.objects.all().delete()
# Integration: metadata types
print('Initialize metadata...')
metadata = {
'publication_date': 'datetime',
'authors': 'string',
'language_fullname': 'string',
'abstract': 'text',
'title': 'string',
'source': 'string',
'volume': 'string',
'text': 'text',
'date': 'datetime',
'page': 'string',
'doi': 'string',
'journal': 'string',
}
for name, type in metadata.items():
Metadata(name=name, type=type).save()
# Integration: languages
print('Initialize languages...')
import pycountry
Language.objects.all().delete()
for language in pycountry.languages:
if 'alpha2' in language.__dict__:
Language(
iso2 = language.alpha2,
iso3 = language.bibliographic,
fullname = language.name,
implemented = 1 if language.alpha2 in ['en', 'fr'] else 0,
).save()
english = Language.objects.get(iso2='en')
french = Language.objects.get(iso2='fr')
# Integration: users
print('Initialize users...')
try:
me = User.objects.get(username='mat')
except:
me = User(username='mat')
me.save()
# Integration: node types
print('Initialize node types...')
try:
typeProject = NodeType.objects.get(name='Project')
except Exception as error:
print(error)
typeProject = NodeType(name='Project')
typeProject.save()
try:
typeCorpus = NodeType.objects.get(name='Corpus')
except Exception as error:
print(error)
typeCorpus = NodeType(name='Corpus')
typeCorpus.save()
try:
typeDoc = NodeType.objects.get(name='Document')
except Exception as error:
print(error)
typeDoc = NodeType(name='Document')
typeDoc.save()
# Integration: resource types
print('Initialize resource...')
try:
typePubmed = ResourceType.objects.get(name='pubmed')
typeIsi = ResourceType.objects.get(name='isi')
typeRis = ResourceType.objects.get(name='ris')
typePresse = ResourceType.objects.get(name='europress')
except Exception as error:
print(error)
typePubmed = ResourceType(name='pubmed')
typePubmed.save()
typeIsi = ResourceType(name='isi')
typeIsi.save()
typeRis = ResourceType(name='ris')
typeRis.save()
typePresse = ResourceType(name='europress')
typePresse.save()
# Integration: project
print('Initialize project...')
try:
project = Node.objects.get(name='Bees project')
except:
project = Node(name='Bees project', type=typeProject, user=me)
project.save()
# Integration: corpus
print('Initialize corpus...')
try:
corpus_pubmed = Node.objects.get(name='PubMed corpus')
except:
corpus_pubmed = Node(parent=project, name='PubMed corpus', type=typeCorpus, user=me)
corpus_pubmed.save()
print('Initialize resource...')
corpus_pubmed.add_resource(
# file='./data_samples/pubmed.zip',
file='./data_samples/pubmed_2013-04-01_HoneyBeesBeeBees.xml',
type=typePubmed,
user=me
)
for resource in corpus_pubmed.get_resources():
print('Resource #%d - %s - %s' % (resource.id, resource.digest, resource.file))
print('Parse corpus #%d...' % (corpus_pubmed.id, ))
corpus_pubmed.parse_resources(verbose=True)
print('Extract corpus #%d...' % (corpus_pubmed.id, ))
corpus_pubmed.children.all().extract_ngrams(['title',])
print('Parsed corpus #%d.' % (corpus_pubmed.id, ))
exit()
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
...@@ -11,7 +11,7 @@ def create_blacklist(user, corpus): ...@@ -11,7 +11,7 @@ def create_blacklist(user, corpus):
def create_synonymes(user, corpus): def create_synonymes(user, corpus):
pass pass
def create_whitelist(user, corpus): def create_whitelist(user, corpus, size=100):
cursor = connection.cursor() cursor = connection.cursor()
try: try:
...@@ -60,16 +60,16 @@ def create_whitelist(user, corpus): ...@@ -60,16 +60,16 @@ def create_whitelist(user, corpus):
ORDER BY ORDER BY
occurrences DESC occurrences DESC
LIMIT LIMIT
100 %d
; ;
""" % (white_list.id, corpus.id, type_document.id) """ % (white_list.id, corpus.id, type_document.id, size)
cursor.execute(query_whitelist) cursor.execute(query_whitelist)
return white_list return white_list
#def create_cooc(user, corpus, whitelist, blacklist, synonymes): #def create_cooc(user, corpus, whitelist, blacklist, synonymes):
def create_cooc(user=None, corpus=None, whitelist=None, size=400): def create_cooc(user=None, corpus=None, whitelist=None, size=150):
cursor = connection.cursor() cursor = connection.cursor()
try: try:
...@@ -133,7 +133,7 @@ def create_cooc(user=None, corpus=None, whitelist=None, size=400): ...@@ -133,7 +133,7 @@ def create_cooc(user=None, corpus=None, whitelist=None, size=400):
cursor.execute(query_cooc) cursor.execute(query_cooc)
return cooc return cooc
def get_cooc(request=None, corpus_id=None, cooc_id=None, type="node_link"): def get_cooc(request=None, corpus_id=None, cooc_id=None, type="node_link", n=150):
import pandas as pd import pandas as pd
from copy import copy from copy import copy
import numpy as np import numpy as np
...@@ -152,9 +152,9 @@ def get_cooc(request=None, corpus_id=None, cooc_id=None, type="node_link"): ...@@ -152,9 +152,9 @@ def get_cooc(request=None, corpus_id=None, cooc_id=None, type="node_link"):
if Node.objects.filter(type=type_cooc, parent=corpus).first() is None: if Node.objects.filter(type=type_cooc, parent=corpus).first() is None:
print("Coocurrences do not exist yet, create it.") print("Coocurrences do not exist yet, create it.")
whitelist = create_whitelist(request.user, corpus) whitelist = create_whitelist(request.user, corpus, size=n)
cooccurrence_node = create_cooc(user=request.user, corpus=corpus, whitelist=whitelist) cooccurrence_node = create_cooc(user=request.user, corpus=corpus, whitelist=whitelist, size=n)
print(cooccurrence_matrix.id, "Cooc created") print(cooccurrence_node.id, "Cooc created")
else: else:
cooccurrence_node = Node.objects.filter(type=type_cooc, parent=corpus).first() cooccurrence_node = Node.objects.filter(type=type_cooc, parent=corpus).first()
...@@ -177,7 +177,7 @@ def get_cooc(request=None, corpus_id=None, cooc_id=None, type="node_link"): ...@@ -177,7 +177,7 @@ def get_cooc(request=None, corpus_id=None, cooc_id=None, type="node_link"):
threshold = min(x.max(axis=1)) threshold = min(x.max(axis=1))
matrix_filtered = np.where(x >= threshold, 1, 0) matrix_filtered = np.where(x >= threshold, 1, 0)
#matrix_filtered = np.where(x > threshold, x, 0) #matrix_filtered = np.where(x > threshold, x, 0)
#matrix_filtered = matrix_filtered.resize((90,90))
G = nx.from_numpy_matrix(matrix_filtered) G = nx.from_numpy_matrix(matrix_filtered)
G = nx.relabel_nodes(G, dict(enumerate([ labels[label] for label in list(df.columns)]))) G = nx.relabel_nodes(G, dict(enumerate([ labels[label] for label in list(df.columns)])))
#G = nx.relabel_nodes(G, dict(enumerate(df.columns))) #G = nx.relabel_nodes(G, dict(enumerate(df.columns)))
...@@ -189,22 +189,37 @@ def get_cooc(request=None, corpus_id=None, cooc_id=None, type="node_link"): ...@@ -189,22 +189,37 @@ def get_cooc(request=None, corpus_id=None, cooc_id=None, type="node_link"):
partition = best_partition(G) partition = best_partition(G)
for node in G.nodes():
try:
#node,type(labels[node])
G.node[node]['label'] = node
G.node[node]['name'] = node
G.node[node]['size'] = weight[node]
G.node[node]['group'] = partition[node]
# G.node[node]['color'] = '19,180,300'
G.add_edge(node, partition[node], weight=3)
except Exception as error:
print(error)
if type == "node_link": if type == "node_link":
for node in G.nodes():
try:
#node,type(labels[node])
G.node[node]['label'] = node
G.node[node]['name'] = node
G.node[node]['size'] = weight[node]
G.node[node]['group'] = partition[node]
#G.add_edge(node, partition[node], weight=3)
# G.node[node]['color'] = '19,180,300'
except Exception as error:
print(error)
data = json_graph.node_link_data(G) data = json_graph.node_link_data(G)
elif type == "adjacency": elif type == "adjacency":
data = json_graph.adjacency_data(G) for node in G.nodes():
try:
#node,type(labels[node])
#G.node[node]['label'] = node
G.node[node]['name'] = node
#G.node[node]['size'] = weight[node]
G.node[node]['group'] = partition[node]
#G.add_edge(node, partition[node], weight=3)
# G.node[node]['color'] = '19,180,300'
except Exception as error:
print(error)
data = json_graph.node_link_data(G)
# data = json_graph.node_link_data(G, attrs={\ # data = json_graph.node_link_data(G, attrs={\
# 'source':'source',\ # 'source':'source',\
# 'target':'target',\ # 'target':'target',\
......
This diff is collapsed.
...@@ -68,6 +68,8 @@ INSTALLED_APPS = ( ...@@ -68,6 +68,8 @@ INSTALLED_APPS = (
'ngram', 'ngram',
'django_hstore', 'django_hstore',
'djcelery', 'djcelery',
'aldjemy',
'rest_framework',
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (
......
...@@ -35,19 +35,21 @@ urlpatterns = patterns('', ...@@ -35,19 +35,21 @@ urlpatterns = patterns('',
# Getting data # Getting data
url(r'^chart/corpus/(\d+)/data.csv$', views.send_csv), url(r'^chart/corpus/(\d+)/data.csv$', views.send_csv),
url(r'^corpus/(\d+)/node_link.json$', views.node_link), url(r'^corpus/(\d+)/node_link.json$', views.node_link),
url(r'^corpus/(\d+)/adjacency.json$', views.adjacency), url(r'^corpus/(\d+)/adjacency.json$', views.node_link),
url(r'^api$', gargantext_web.api.Root),
url(r'^api/nodes/(\d+)/children/metadata$', gargantext_web.api.NodesChildrenMetatadata.as_view()),
url(r'^api/nodes/(\d+)/children/queries$', gargantext_web.api.NodesChildrenQueries.as_view()),
# REST views
url(r'^api/nodes$', gargantext_web.api.NodesController.get), url(r'^api/nodes$', gargantext_web.api.NodesController.get),
url(r'^api/corpus/(\d+)/ngrams$', gargantext_web.api.CorpusController.ngrams), url(r'^api/nodes/(\d+)/ngrams$', gargantext_web.api.CorpusController.ngrams),
url(r'^api/corpus/(\d+)/metadata$', gargantext_web.api.CorpusController.metadata), url(r'^api/nodes/(\d+)/data$', gargantext_web.api.CorpusController.data),
url(r'^api/corpus/(\d+)/data$', gargantext_web.api.CorpusController.data),
# Tests (to be removed soon)
url(r'^graph-it$', views.graph_it), url(r'^graph-it$', views.graph_it),
url(r'^ngrams$', views.ngrams), url(r'^ngrams$', views.ngrams),
) )
from django.conf import settings from django.conf import settings
if settings.DEBUG: if settings.DEBUG:
urlpatterns += patterns('', urlpatterns += patterns('',
......
...@@ -367,7 +367,6 @@ def corpus(request, project_id, corpus_id): ...@@ -367,7 +367,6 @@ def corpus(request, project_id, corpus_id):
return HttpResponse(html) return HttpResponse(html)
def delete_project(request, node_id): def delete_project(request, node_id):
Node.objects.filter(id=node_id).all().delete() Node.objects.filter(id=node_id).all().delete()
return HttpResponseRedirect('/projects/') return HttpResponseRedirect('/projects/')
......
...@@ -30,3 +30,5 @@ sudo apt-get install libopenblas-dev ...@@ -30,3 +30,5 @@ sudo apt-get install libopenblas-dev
sudo apt-get install liblapack-dev sudo apt-get install liblapack-dev
source /srv/gargantext_env/bin/activate
pip install git+https://github.com/mathieurodic/aldjemy.git
...@@ -6,7 +6,7 @@ Pillow==2.5.3 ...@@ -6,7 +6,7 @@ Pillow==2.5.3
Pygments==1.6 Pygments==1.6
SQLAlchemy==0.9.8 SQLAlchemy==0.9.8
South==1.0 South==1.0
aldjemy==0.3.51 aldjemy==0.3.10
amqp==1.4.6 amqp==1.4.6
anyjson==0.3.3 anyjson==0.3.3
billiard==3.3.0.18 billiard==3.3.0.18
...@@ -26,13 +26,14 @@ django-hstore==1.3.1 ...@@ -26,13 +26,14 @@ django-hstore==1.3.1
django-mptt==0.6.1 django-mptt==0.6.1
django-nested-inlines==0.1 django-nested-inlines==0.1
django-treebeard==2.0 django-treebeard==2.0
djangorestframework==3.0.0
graphviz==0.4 graphviz==0.4
ipython==2.2.0 ipython==2.2.0
kombu==3.0.23 kombu==3.0.23
lxml==3.3.6 lxml==3.3.6
#matplotlib==1.4.0 matplotlib==1.4.0
networkx==1.9 networkx==1.9
#nltk==3.0a4 nltk==3.0a4
nose==1.3.4 nose==1.3.4
numpy==1.8.2 numpy==1.8.2
pandas==0.14.1 pandas==0.14.1
......
...@@ -75,6 +75,23 @@ class NodeQuerySet(CTENodeManager.CTEQuerySet): ...@@ -75,6 +75,23 @@ class NodeQuerySet(CTENodeManager.CTEQuerySet):
ngramscaches = NgramsCaches() ngramscaches = NgramsCaches()
for node in self: for node in self:
node.extract_ngrams(keys, ngramsextractorscache, ngramscaches) node.extract_ngrams(keys, ngramsextractorscache, ngramscaches)
def make_metadata_filterable(self):
metadata_cache = {metadata.name: metadata for metadata in Metadata.objects.all()}
data = []
for node in self:
print(node.id)
for key, value in node.metadata.items():
if key in metadata_cache:
metadata = metadata_cache[key]
if metadata.type == 'string':
value = value[:255]
data.append(Node_Metadata(**{
'node_id' : node.id,
'metadata_id' : metadata.id,
('value_'+metadata.type) : value,
}))
Node_Metadata.objects.bulk_create(data)
class NodeManager(CTENodeManager): class NodeManager(CTENodeManager):
"""Methods available from Node.object.""" """Methods available from Node.object."""
...@@ -85,6 +102,10 @@ class NodeManager(CTENodeManager): ...@@ -85,6 +102,10 @@ class NodeManager(CTENodeManager):
if name.startswith("_"): if name.startswith("_"):
raise AttributeError raise AttributeError
return getattr(self.get_queryset(), name, *args) return getattr(self.get_queryset(), name, *args)
class Metadata(models.Model):
name = models.CharField(max_length=32, db_index=True)
type = models.CharField(max_length=16, db_index=True)
class Node(CTENode): class Node(CTENode):
"""The node.""" """The node."""
...@@ -137,7 +158,7 @@ class Node(CTENode): ...@@ -137,7 +158,7 @@ class Node(CTENode):
return resource return resource
@current_app.task(filter=task_method) @current_app.task(filter=task_method)
def parse_resources(self): def parse_resources(self, verbose=False):
# parse all resources into a list of metadata # parse all resources into a list of metadata
metadata_list = [] metadata_list = []
for node_resource in self.node_resource.filter(parsed=False): for node_resource in self.node_resource.filter(parsed=False):
...@@ -151,22 +172,33 @@ class Node(CTENode): ...@@ -151,22 +172,33 @@ class Node(CTENode):
'europress_english' : EuropressFileParser, 'europress_english' : EuropressFileParser,
})[resource.type.name]() })[resource.type.name]()
metadata_list += parser.parse(str(resource.file)) metadata_list += parser.parse(str(resource.file))
# insert the new resources in the database! # retrieve info from the database
type = NodeType.objects.get(name='Document') type_id = NodeType.objects.get(name='Document').id
langages_cache = LanguagesCache() langages_cache = LanguagesCache()
Node.objects.bulk_create([ user_id = self.user.id
# insert the new resources in the database!
for i, metadata_values in enumerate(metadata_list):
if verbose:
print(i, end='\r', flush=True)
name = metadata_values.get('title', '')[:200]
language = langages_cache[metadata_values['language_iso2']] if 'language_iso2' in metadata_values else None,
if isinstance(language, tuple):
language = language[0]
Node( Node(
user = self.user, user_id = user_id,
type = type, type_id = type_id,
name = metadata['title'][0:199] if 'title' in metadata else '', name = name,
parent = self, parent = self,
language = langages_cache[metadata['language_iso2']] if 'language_iso2' in metadata else None, language_id = language.id if language else None,
metadata = metadata, metadata = metadata_values
) ).save()
for metadata in metadata_list
]) # make metadata filterable
self.children.all().make_metadata_filterable()
# mark the resources as parsed for this node # mark the resources as parsed for this node
self.node_resource.update(parsed=True) self.node_resource.update(parsed=True)
@current_app.task(filter=task_method) @current_app.task(filter=task_method)
def extract_ngrams(self, keys, ngramsextractorscache=None, ngramscaches=None): def extract_ngrams(self, keys, ngramsextractorscache=None, ngramscaches=None):
...@@ -203,6 +235,15 @@ class Node(CTENode): ...@@ -203,6 +235,15 @@ class Node(CTENode):
for ngram_text, weight in associations.items() for ngram_text, weight in associations.items()
]) ])
class Node_Metadata(models.Model):
node = models.ForeignKey(Node)
metadata = models.ForeignKey(Metadata)
value_int = models.IntegerField(null=True, db_index=True)
value_float = models.FloatField(null=True, db_index=True)
value_string = models.CharField(max_length=255, null=True, db_index=True)
value_datetime = models.DateTimeField(null=True, db_index=True)
value_text = models.TextField(null=True)
class Node_Resource(models.Model): class Node_Resource(models.Model):
node = models.ForeignKey(Node, related_name='node_resource') node = models.ForeignKey(Node, related_name='node_resource')
resource = models.ForeignKey(Resource) resource = models.ForeignKey(Resource)
......
...@@ -75,9 +75,10 @@ class LanguagesCache(defaultdict): ...@@ -75,9 +75,10 @@ class LanguagesCache(defaultdict):
self[str(language.iso2.lower())] = language self[str(language.iso2.lower())] = language
self[str(language.iso3.lower())] = language self[str(language.iso3.lower())] = language
self[str(language.fullname.lower())] = language self[str(language.fullname.lower())] = language
betterKey = key.strip().lower() if key not in self.keys():
self[key] = self[betterKey] if betterKey in self.keys() else None betterKey = key.strip().lower()
return self[betterKey] self[key] = self[betterKey] if betterKey in self.keys() else None
return self[key]
......
No preview for this file type
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg4362"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="logo.svg">
<defs
id="defs4364" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6897594"
inkscape:cx="-11.235831"
inkscape:cy="3.8560006"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1360"
inkscape:window-height="762"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata4367">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<rect
style="fill:#fffcfc;fill-opacity:1;stroke:none"
id="rect3755"
width="29.70249"
height="31.108515"
x="0"
y="-0.1566938"
inkscape:export-filename="/srv/gargantext/static/img/logo.png"
inkscape:export-xdpi="53"
inkscape:export-ydpi="53" />
<g
inkscape:export-ydpi="53.799999"
inkscape:export-xdpi="53.799999"
inkscape:export-filename="/srv/gargantext/static/img/logo.png"
style="fill:#ff8080;fill-opacity:0.82014388"
id="g3835"
transform="matrix(0.2422549,0,0,0.23374214,-49.789462,-7.9055988)">
<path
inkscape:export-ydpi="100"
inkscape:export-xdpi="100"
inkscape:export-filename="/home/alexandre/projets/gargantext.py/gargantext_core/shared/LogoSimple.png"
id="path3837"
d="m 206.24721,35.28586 0,129.5 67.78125,0 0,-8.625 c -9.86526,-0.47262 -18.57934,-2.63259 -25.5625,-6.28125 -18.65918,-9.74237 -29.875,-28.26535 -29.875,-49.1875 0,-31.71741 21.11877,-52.8149 55.4375,-55.1875 l 0,-10.21875 -67.78125,0 z m 67.78125,10.21875 0,8.5 c 1.74191,-0.16369 3.53543,-0.28125 5.37499,-0.28125 6.91081,0 13.295,1.44116 19.6875,4.15625 l 2.40625,2.875 2.59375,14.53125 9.6875,0 0,-25.375 c -11.40283,-3.03451 -22.61727,-4.65625 -33.15625,-4.65625 -2.24526,0 -4.44959,0.10177 -6.59374,0.25 z m 0,8.5 c -23.28864,2.18852 -37.65625,18.81513 -37.65625,45.562503 0,27.600037 14.44681,45.025437 37.65625,47.812497 l 0,-93.375 z m 0,93.375 0,8.78125 c 1.36224,0.0653 2.75177,0.0937 4.15624,0.0937 10.19344,0 22.1324,-1.88915 35.78125,-5.5625 l 0,-38.1875 2.9375,-2.21875 9.5,-0.8125 0,-6.5625 -43.21875,0 0,6.5625 12.28125,0.8125 2.9375,2.21875 0,33.21875 c -6.73804,1.4374 -12.61466,2.09375 -17.625,2.09375 -2.32322,0 -4.57592,-0.17643 -6.74999,-0.4375 z"
style="font-size:166.11251831px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ff8080;fill-opacity:0.82014388;stroke:none;font-family:Bitstream Charter;-inkscape-font-specification:Bitstream Charter"
inkscape:connector-curvature="0" />
<path
inkscape:export-ydpi="100"
inkscape:export-xdpi="100"
transform="translate(611.62306,-400.10238)"
sodipodi:open="true"
sodipodi:end="6.1660663"
sodipodi:start="0"
d="m -312.87112,480.17926 c 0,4.97881 -4.03612,9.01493 -9.01493,9.01493 -4.97881,0 -9.01493,-4.03612 -9.01493,-9.01493 0,-4.97881 4.03612,-9.01493 9.01493,-9.01493 4.57131,0 8.41901,3.42153 8.95317,7.96152"
sodipodi:ry="9.0149298"
sodipodi:rx="9.0149298"
sodipodi:cy="480.17926"
sodipodi:cx="-321.88605"
id="path3839"
style="fill:#ff8080;fill-opacity:0.82014388;stroke:none"
sodipodi:type="arc" />
</g>
</g>
</svg>
This diff is collapsed.
...@@ -116,9 +116,9 @@ ...@@ -116,9 +116,9 @@
<div class="jumbotron"> <div class="jumbotron">
<h3><a href="/ngrams">Dictionaries</a></h3> <h3><a href="/ngrams">Dictionaries</a></h3>
<ol> <ol>
<li>White Lists</li>
<li>Black Lists</li>
<li>Synonyms</li> <li>Synonyms</li>
<li>Black Lists</li>
<li>White Lists</li>
</ol> </ol>
</div> </div>
</div> </div>
...@@ -129,7 +129,7 @@ ...@@ -129,7 +129,7 @@
<ol> <ol>
<li><a href="/corpus/{{ corpus.id }}/matrix">Adjacency matrix</a></li> <li><a href="/corpus/{{ corpus.id }}/matrix">Adjacency matrix</a></li>
<li><a href="/corpus/{{ corpus.id }}/explorer">Static maps</a></li> <li><a href="/corpus/{{ corpus.id }}/explorer">Static maps</a></li>
<li>Dynamics maps</li> <li>Dynamic maps</li>
</ol> </ol>
</div> </div>
</div> </div>
......
...@@ -33,7 +33,9 @@ text.active { ...@@ -33,7 +33,9 @@ text.active {
</div> </div>
</div> </div>
<div id="graphid" style="visibility: hidden;">/corpus/{{ corpus.id }}/node_link.json</div>
<div class="container">
<div id="graphid" style="visibility: hidden;">/corpus/{{ corpus.id }}/adjacency.json</div>
<script src="{% static "js/jquery/jquery.min.js" %}" type="text/javascript"></script> <script src="{% static "js/jquery/jquery.min.js" %}" type="text/javascript"></script>
...@@ -46,6 +48,8 @@ text.active { ...@@ -46,6 +48,8 @@ text.active {
</select> </select>
</p> </p>
</div>
<script> <script>
var margin = {top: 80, right: 0, bottom: 10, left: 80}, var margin = {top: 80, right: 0, bottom: 10, left: 80},
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
</head> </head>
{% load staticfiles %}
<body> <body>
<!-- Fixed navbar --> <!-- Fixed navbar -->
<div id="dafixedtop" class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <div id="dafixedtop" class="navbar navbar-inverse navbar-fixed-top" role="navigation">
...@@ -16,7 +17,7 @@ ...@@ -16,7 +17,7 @@
<span class="icon-bar"></span> <span class="icon-bar"></span>
<span class="icon-bar"></span> <span class="icon-bar"></span>
</button> </button>
<a class="navbar-brand" href="/">Gargantext</a> <a class="navbar-brand" style="line-height:15px; height:10px; padding: 10px 10px;" href="/"><img src="{% static "img/logo.svg" %}"></a>
</div> </div>
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
......
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