class TestClientExpreissions(unittest.TestCase): def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) self.jsonBulkExpression = None # path relative to current working dir with open(bulkInput, "r") as f: self.jsonBulkExpression = "".join(f.readlines()) def testExpressions(self): fp = self.client.getFingerprintForExpression(oneTermInputJSON, sparsity=0.5) self.assertGreater(len(fp.positions), 100) def testContexts(self): contexts = self.client.getContextsForExpression(simpleExpression, getFingerprint=True, startIndex=0, maxResults=3, sparsity=1.0) self.assertTrue(contexts != None) self.assertEqual(3, len(contexts)) c0 = contexts[0] self.assertGreater(len(c0.fingerprint.positions), 100) self.assertTrue(conf.isString(c0.context_label)) self.assertTrue(c0.context_id == 0) def testSimilarTerms(self): terms = self.client.getSimilarTermsForExpression(simpleExpression, contextId=None, posType="NOUN", getFingerprint=True, startIndex=0, maxResults=8, sparsity=1.0) self.assertTrue(terms != None) self.assertEqual(8, len(terms)) for term in terms: self.assertGreater(len(term.fingerprint.positions), 100) self.assertTrue(term != None) self.assertTrue("NOUN" in term.pos_types) def testExpressionBulk(self): fps = self.client.getFingerprintsForExpressions(self.jsonBulkExpression) self.assertEqual(6, len(fps)) for fp in fps: self.assertGreater(len(fp.positions), 50) def testExpressionContextsBulk(self): contextsList = self.client.getContextsForExpressions(self.jsonBulkExpression, getFingerprint=True, startIndex=0, maxResults=3) self.assertEqual(len(contextsList), 6) for contextList in contextsList: for i, context in enumerate(contextList): self.assertGreater(len(context.fingerprint.positions), 50) self.assertTrue(conf.isString(context.context_label)) self.assertTrue(context.context_id == i) def testExpressionSimilarTermsBulk(self): termsLists = self.client.getSimilarTermsForExpressions(self.jsonBulkExpression, getFingerprint=True, maxResults=7) self.assertTrue(len(termsLists) == 6) for termList in termsLists: self.assertTrue(len(termList) == 7) self.assertGreater(len(termList[0].fingerprint.positions), 100)
class LiteClient(object): """Minimalistic client for accessing core features of Cortical.io's Retina API in a simple way.""" def __init__(self, apiKey): self._fullClient = FullClient(apiKey, apiServer="http://api.cortical.io/rest", retinaName="en_associative") def _createDictionary(self, textOrFingerprint): if type(textOrFingerprint) == str: return {"text": textOrFingerprint} elif type(textOrFingerprint) == list: return {"positions": textOrFingerprint} else: raise CorticalioException("Invalid argument, cannot create input from: '%s'" % (str(textOrFingerprint))) def getSimilarTerms(self, textOrFingerprint): """Get the similar terms for a given text or fingerprint Args: textOrFingerprint, str OR list of integers Returns: list of str: the 20 most similar terms Raises: CorticalioException: if the request was not successful """ expression = self._createDictionary(textOrFingerprint) terms = self._fullClient.getSimilarTermsForExpression(json.dumps(expression), maxResults=20) return [t.term for t in terms] def getKeywords(self, text): """Get a list of keywords from the text Args: text, str: The input document Returns: list of str Raises: CorticalioException: if the request was not successful """ terms = self._fullClient.getKeywordsForText(text) return terms def getFingerprint(self, text): """Get the semantic fingerprint of the input text. Args: text, str: The text to be evaluated Returns: list of str: the positions of the semantic fingerprint Raises: CorticalioException: if the request was not successful """ fp = self._fullClient.getFingerprintForText(text) return fp.positions def compare(self, textOrFingerprint1, textOrFingerprint2): """Returns the semantic similarity of texts or fingerprints. Each argument can be eiter a text or a fingerprint. Args: textOrFingerprint1, str OR list of integers textOrFingerprint2, str OR list of integers Returns: float: the semantic similarity in the range [0;1] Raises: CorticalioException: if the request was not successful """ compareList = [self._createDictionary(textOrFingerprint1), self._createDictionary(textOrFingerprint2)] metric = self._fullClient.compare(json.dumps(compareList)) return metric.cosineSimilarity def createCategoryFilter(self, positiveExamples): """Creates a filter fingerprint. Args: positiveExamples, list(str): The list of positive example texts. Returns: list of int: the positions representing the filter representing the texts Raises: CorticalioException: if the request was not successful """ categoryFilter = self._fullClient.createCategoryFilter("CategoryFilter", positiveExamples) return categoryFilter.positions
class LiteClient(object): """Minimalistic client for accessing core features of Cortical.io's Retina API in a simple way.""" def __init__(self, apiKey): self._fullClient = FullClient(apiKey, apiServer="http://api.cortical.io/rest", retinaName="en_associative") def _createDictionary(self, textOrFingerprint): if type(textOrFingerprint) == str: return {"text": textOrFingerprint} elif type(textOrFingerprint) == list: return {"positions": textOrFingerprint} else: raise CorticalioException( "Invalid argument, cannot create input from: '%s'" % (str(textOrFingerprint))) def getSimilarTerms(self, textOrFingerprint): """Get the similar terms for a given text or fingerprint Args: textOrFingerprint, str OR list of integers Returns: list of str: the 20 most similar terms Raises: CorticalioException: if the request was not successful """ expression = self._createDictionary(textOrFingerprint) terms = self._fullClient.getSimilarTermsForExpression( json.dumps(expression), maxResults=20) return [t.term for t in terms] def getKeywords(self, text): """Get a list of keywords from the text Args: text, str: The input document Returns: list of str Raises: CorticalioException: if the request was not successful """ terms = self._fullClient.getKeywordsForText(text) return terms def getFingerprint(self, text): """Get the semantic fingerprint of the input text. Args: text, str: The text to be evaluated Returns: list of str: the positions of the semantic fingerprint Raises: CorticalioException: if the request was not successful """ fp = self._fullClient.getFingerprintForText(text) return fp.positions def compare(self, textOrFingerprint1, textOrFingerprint2): """Returns the semantic similarity of texts or fingerprints. Each argument can be eiter a text or a fingerprint. Args: textOrFingerprint1, str OR list of integers textOrFingerprint2, str OR list of integers Returns: float: the semantic similarity in the range [0;1] Raises: CorticalioException: if the request was not successful """ compareList = [ self._createDictionary(textOrFingerprint1), self._createDictionary(textOrFingerprint2) ] metric = self._fullClient.compare(json.dumps(compareList)) return metric.cosineSimilarity def createCategoryFilter(self, positiveExamples): """Creates a filter fingerprint. Args: positiveExamples, list(str): The list of positive example texts. Returns: list of int: the positions representing the filter representing the texts Raises: CorticalioException: if the request was not successful """ categoryFilter = self._fullClient.createCategoryFilter( "CategoryFilter", positiveExamples) return categoryFilter.positions
class TestClientExpreissions(unittest.TestCase): def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) self.jsonBulkExpression = None # path relative to current working dir with open(bulkInput, "r") as f: self.jsonBulkExpression = "".join(f.readlines()) def testExpressions(self): fp = self.client.getFingerprintForExpression(oneTermInputJSON, sparsity=0.5) self.assertGreater(len(fp.positions), 100) def testContexts(self): contexts = self.client.getContextsForExpression(simpleExpression, getFingerprint=True, startIndex=0, maxResults=3, sparsity=1.0) self.assertTrue(contexts != None) self.assertEqual(3, len(contexts)) c0 = contexts[0] self.assertGreater(len(c0.fingerprint.positions), 100) self.assertTrue(conf.isString(c0.context_label)) self.assertTrue(c0.context_id == 0) def testSimilarTerms(self): terms = self.client.getSimilarTermsForExpression(simpleExpression, contextId=None, posType="NOUN", getFingerprint=True, startIndex=0, maxResults=8, sparsity=1.0) self.assertTrue(terms != None) self.assertEqual(8, len(terms)) for term in terms: self.assertGreater(len(term.fingerprint.positions), 100) self.assertTrue(term != None) self.assertTrue("NOUN" in term.pos_types) def testExpressionBulk(self): fps = self.client.getFingerprintsForExpressions( self.jsonBulkExpression) self.assertEqual(6, len(fps)) for fp in fps: self.assertGreater(len(fp.positions), 50) def testExpressionContextsBulk(self): contextsList = self.client.getContextsForExpressions( self.jsonBulkExpression, getFingerprint=True, startIndex=0, maxResults=3) self.assertEqual(len(contextsList), 6) for contextList in contextsList: for i, context in enumerate(contextList): self.assertGreater(len(context.fingerprint.positions), 50) self.assertTrue(conf.isString(context.context_label)) self.assertTrue(context.context_id == i) def testExpressionSimilarTermsBulk(self): termsLists = self.client.getSimilarTermsForExpressions( self.jsonBulkExpression, getFingerprint=True, maxResults=7) self.assertTrue(len(termsLists) == 6) for termList in termsLists: self.assertTrue(len(termList) == 7) self.assertGreater(len(termList[0].fingerprint.positions), 100)