1
0
mirror of https://github.com/gsi-upm/senpy synced 2025-09-18 04:22:21 +00:00

Better jsonld support

This commit is contained in:
J. Fernando Sánchez
2014-11-27 10:51:00 +01:00
parent 2f7a8d7267
commit 2834967026
7 changed files with 61 additions and 34 deletions

View File

@@ -4,35 +4,48 @@ from collections import defaultdict
class Leaf(defaultdict):
def __init__(self, ofclass=list):
def __init__(self, context=None, ofclass=list):
super(Leaf, self).__init__(ofclass)
if context:
self.context = context
def __getattr__(self, name):
return super(Leaf, self).__getitem__(name)
if name is not "context":
return super(Leaf, self).__getitem__(name)
return self["@context"]
def __setattr__(self, name, value):
self[name] = value
name = "@context" if name is "context" else name
self[name] = self.get_context(value)
def __delattr__(self, name):
return super(Leaf, self).__delitem__(name)
@staticmethod
def get_context(context):
if isinstance(context, list):
contexts = []
for c in context:
contexts.append(Response.get_context(c))
return contexts
elif isinstance(context, dict):
return context
elif isinstance(context, basestring):
try:
with open(context) as f:
return json.loads(f.read())
except IOError:
return context
class Response(Leaf):
def __init__(self, context=None):
super(Response, self).__init__()
self["analysis"] = []
self["entries"] = []
def __init__(self, context=None, *args, **kwargs):
if context is None:
context = "{}/context.jsonld".format(os.path.dirname(
os.path.realpath(__file__)))
if isinstance(context, dict):
self["@context"] = context
if isinstance(context, str) or isinstance(context, unicode):
try:
with open(context) as f:
self["@context"] = json.loads(f.read())
except IOError:
self["@context"] = context
super(Response, self).__init__(*args, context=context, **kwargs)
self["analysis"] = []
self["entries"] = []
class Entry(Leaf):
@@ -47,17 +60,27 @@ class Entry(Leaf):
class Opinion(Leaf):
def __init__(self, polarity_value=None, polarity=None, **kwargs):
super(Opinion, self).__init__(**kwargs)
if polarity_value is not None:
self.polarity_value = polarity_value
if polarity is not None:
self.polarity = polarity
opinionContext = {
"@vocab": "http://www.gsi.dit.upm.es/ontologies/marl/ns#"
}
def __init__(self, polarityValue=None, hasPolarity=None, *args, **kwargs):
super(Opinion, self).__init__(context=self.opinionContext,
*args,
**kwargs)
if polarityValue is not None:
self.polarityValue = polarityValue
if hasPolarity is not None:
self.hasPolarity = hasPolarity
class EmotionSet(Leaf):
def __init__(self, emotions=None, **kwargs):
emotionContext = {
"@vocab": "http://www.gsi.dit.upm.es/ontologies/onyx/ns#"
}
def __init__(self, emotions=None, *args, **kwargs):
if not emotions:
emotions = []
super(EmotionSet, self).__init__(**kwargs)
super(EmotionSet, self).__init__(context=self.emotionContext,
*args,
**kwargs)
self.emotions = emotions or []