result is an concept object returned by normalization (which involves stemming, stop word removal etc.) of string "Mumbai".
To get different assertion involving concept represented by "Mumbai" you need to access properties of returned object.
etc.
class Concept(models.Model):
language = models.ForeignKey(Language)
text = models.TextField()
num_predicates = models.IntegerField(default=0)
words = models.IntegerField()
cached_name = models.TextField()
# Unused:
last_update = models.DateTimeField()
last_inference = models.DateTimeField()
active = models.BooleanField()
def __unicode__(self):
def get_assertions(self, useful_only=True):
'''Get all assertions about this concept.'''
conditions = Q(concept1=self) | Q(concept2=self)
if useful_only:
return Assertion.useful.filter(conditions)
else:
return Assertion.objects.filter(conditions)
def get_fwd_relations(self):
'''Get all forward relations from this concept
A forward relation is an assertion with this concept
as its first entry.
Adds an "other" field, for the other concept.
Returns a genarator expression.'''
# TODO: port this to a QuerySet subclass to add the 'other'.
def with_other(assertion):
assertion.other = assertion.concept2
return assertion
return (with_other(assertion) for assertion in self.fwd_relations.all())
def get_rev_relations(self):
'''Get all reverse relations from this concept.
A reverse relation is a relation with this concept
as its second entry.'''
def with_other(assertion):
assertion.other = assertion.concept1
return assertion
return (with_other(assertion) for assertion in self.rev_relations.all())
def get_nlrepr_all(self):
reprs = {}
for p in self.fwd_relations.values('text1'):
reprs.setdefault(p['text1'], 0)
reprs[p['text1']] += 1
for p in self.rev_relations.values('text2'):
reprs.setdefault(p['text2'], 0)
reprs[p['text2']] += 1
# FIXME: use key= parameter instead.
decorated = [(x[1], x[0]) for x in reprs.items()]
decorated.sort(reverse=True)
return [r[-1] for r in decorated]
def get_nlrepr_most_common(self):
return self.get_nlrepr_all()[0]
@property
def canonical_name(self):
if not self.cached_name:
# Simple algorithm loosely based off of Rob's
reprs = self.get_nlrepr_all()
if len(reprs) == 0: return ''
def len_penalize_negation(x):
if negated_re.search(x):
return 100 + len(x)
else:
return len(x)
reprs.sort(key=len_penalize_negation)
self.cached_name = reprs[0]
self.save()
return self.cached_name
@classmethod
def get(cls, text, language, auto_create=False):
if not isinstance(language, Language):
language = Language.get(language)
return cls.get_raw(language.nl.normalize(text), language, auto_create)
@classmethod
def get_raw(cls, normalized_text, language, auto_create=False):
if auto_create:
concept_obj, created = cls.objects.get_or_create(text=normalized_text,language=language)
else:
concept_obj = cls.objects.get(text=normalized_text,language=language)
return concept_obj
class Meta:
db_table = 'stems'
unique_together = (('text','language',),)