class TestClassifyApi(unittest.TestCase): def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) def testCreateCategoryFilter(self): filterName = "filter1" filter1 = self.client.createCategoryFilter(filterName, positiveExamples, negativeExamples) self.assertGreater(len(filter1.positions), 50) self.assertEqual(filter1.categoryName, filterName) def testErrors(self): expectedException = False try: self.client.createCategoryFilter(None, positiveExamples, negativeExamples) except CorticalioException: expectedException = True self.assertTrue(expectedException) expectedException = False try: self.client.createCategoryFilter("filterName", [], negativeExamples) except CorticalioException: expectedException = True self.assertTrue(expectedException)
class TestClientImageApi(unittest.TestCase): """INFO: 'base64/png' image data can be written to disk like this (python2.7): with open("imageToSave.png", "wb") as f: f.write(imageData.decode('base64')) """ def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) def testImage(self): imageData = self.client.getImage(inputJSON) self.assertNotEqual(imageData, None) self.assertGreater(len(imageData), 1000) def testCompare(self): imageData = self.client.compareImage(inputJSONarray) self.assertNotEqual(imageData, None) self.assertGreater(len(imageData), 1000) def testBulk(self): images = self.client.getImages(inputJSONarray3, getFingerprint=True) self.assertEqual(len(images), 3) for image in images: self.assertNotEqual(image, None) self.assertNotEqual(image.image_data, None) self.assertGreater(len(image.image_data), 1000) self.assertGreater(len(image.fingerprint.positions), 50)
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())
class TestClientTextApi(unittest.TestCase): def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) def testText(self): fp = self.client.getFingerprintForText(inputText) self.assertNotEqual(fp, None) self.assertGreater(len(fp.positions), 500) def testKeywords(self): termList = self.client.getKeywordsForText(inputText) self.assertGreater(len(termList), 2) self.assertTrue(conf.isString(termList[0])) def testTokenize(self): sentences = self.client.getTokensForText(inputText) self.assertGreater(len(sentences), 10) self.assertTrue(conf.isString(sentences[0])) firstSentence = sentences[0].split(',') self.assertEqual(firstSentence[0], "george") self.assertGreater(len(firstSentence), 10) verbsSentences = self.client.getTokensForText(inputText, POStags="VB") for verb in verbsSentences[0].split(","): self.assertTrue("VERB" in self.client.getTerms( term=verb)[0].pos_types) def testSlices(self): texts = self.client.getSlicesForText(inputText, getFingerprint=True, startIndex=0, maxResults=2) self.assertEqual(len(texts), 2) self.assertEqual(texts[0].text.split(' ')[0], "George") self.assertGreater(len(texts[0].fingerprint.positions), 100) def testBulk(self): fingerprints = self.client.getFingerprintsForTexts(bulkTexts, sparsity=1.0) self.assertEqual(len(fingerprints), 4) for fp in fingerprints: self.assertGreater(len(fp.positions), 100) def testLanguageDetection(self): self.assertEqual( self.client.getLanguageForText("I have a dream!").language, "English") self.assertEqual( self.client.getLanguageForText("Ich bin ein").wiki_url, "http://en.wikipedia.org/wiki/German_language") self.assertEqual( self.client.getLanguageForText( "Der var så dejligt ude på landet.").iso_tag, "da")
class TestClientTermsApi(unittest.TestCase): def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) def testTerms(self): terms = self.client.getTerms(term="apple", getFingerprint=True, startIndex=0, maxResults=5) self.assertTrue(len(terms) == 1) self.assertTrue(terms[0].term == "apple") self.assertTrue("NOUN" in terms[0].pos_types) self.assertTrue(terms[0].df > 0.0001) self.assertGreater(len(terms[0].fingerprint.positions), 100) terms100 = self.client.getTerms("app*", startIndex=0, maxResults=100) self.assertEqual(len(terms100), 100) def testContexts(self): contexts = self.client.getContextsForTerm(term="apple", getFingerprint=True, startIndex=0, maxResults=3) 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.getSimilarTermsForTerm(term="apple", contextId=0, posType="NOUN", getFingerprint=True, startIndex=0, maxResults=8) self.assertTrue(terms != None) self.assertEqual(8, len(terms)) t0 = terms[0] self.assertTrue(len(t0.fingerprint.positions) > 0) self.assertTrue(t0 != None) self.assertTrue("NOUN" in t0.pos_types) def testExceptionTerms(self): exceptionOccurred = False try: terms = self.client.getSimilarTermsForTerm(term="apple", posType="wrong") except CorticalioException: exceptionOccurred = True self.assertTrue(exceptionOccurred)
class TestClientTextApi(unittest.TestCase): def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) def testText(self): fp = self.client.getFingerprintForText(inputText) self.assertNotEqual(fp, None) self.assertGreater(len(fp.positions), 500) def testKeywords(self): termList = self.client.getKeywordsForText(inputText) self.assertGreater(len(termList), 2) self.assertTrue(conf.isString(termList[0])) def testTokenize(self): sentences = self.client.getTokensForText(inputText) self.assertGreater(len(sentences), 10) self.assertTrue(conf.isString(sentences[0])) firstSentence = sentences[0].split(',') self.assertEqual(firstSentence[0], "george") self.assertGreater(len(firstSentence), 10) verbsSentences = self.client.getTokensForText(inputText, POStags="VB") for verb in verbsSentences[0].split(","): self.assertTrue("VERB" in self.client.getTerms(term=verb)[0].pos_types) def testSlices(self): texts = self.client.getSlicesForText(inputText, getFingerprint=True, startIndex=0, maxResults=2) self.assertEqual(len(texts), 2) self.assertEqual(texts[0].text.split(' ')[0], "George") self.assertGreater(len(texts[0].fingerprint.positions), 100) def testBulk(self): fingerprints = self.client.getFingerprintsForTexts(bulkTexts, sparsity=1.0) self.assertEqual(len(fingerprints), 4) for fp in fingerprints: self.assertGreater(len(fp.positions), 100) def testLanguageDetection(self): self.assertEqual(self.client.getLanguageForText("I have a dream!").language, "English") self.assertEqual(self.client.getLanguageForText("Ich bin ein").wiki_url, "http://en.wikipedia.org/wiki/German_language") self.assertEqual(self.client.getLanguageForText("Der var så dejligt ude på landet.").iso_tag, "da")
class TestClientTermsApi(unittest.TestCase): def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) def testTerms(self): terms = self.client.getTerms(term="apple", getFingerprint=True, startIndex=0, maxResults=5) self.assertTrue(len(terms) == 1) self.assertTrue(terms[0].term == "apple") self.assertTrue("NOUN" in terms[0].pos_types) self.assertTrue(terms[0].df > 0.0001) self.assertGreater(len(terms[0].fingerprint.positions), 100) terms100 = self.client.getTerms("app*", startIndex=0, maxResults=100) self.assertEqual(len(terms100), 100) def testContexts(self): contexts = self.client.getContextsForTerm(term="apple", getFingerprint=True, startIndex=0, maxResults=3) 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.getSimilarTermsForTerm( term="apple", contextId=0, posType="NOUN", getFingerprint=True, startIndex=0, maxResults=8 ) self.assertTrue(terms != None) self.assertEqual(8, len(terms)) t0 = terms[0] self.assertTrue(len(t0.fingerprint.positions) > 0) self.assertTrue(t0 != None) self.assertTrue("NOUN" in t0.pos_types) def testExceptionTerms(self): exceptionOccurred = False try: terms = self.client.getSimilarTermsForTerm(term="apple", posType="wrong") except CorticalioException: exceptionOccurred = True self.assertTrue(exceptionOccurred)
class TestClientRetinasApi(unittest.TestCase): def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) def testRetinas(self): retinas = self.client.getRetinas() self.assertNotEqual(retinas, None) self.assertNotEqual(retinas[0], None) self.assertNotEqual(retinas[1], None) self.assertTrue("en_synonymous" == retinas[0].retinaName or "en_associative" == retinas[0].retinaName) self.assertTrue("en_synonymous" == retinas[1].retinaName or "en_associative" == retinas[1].retinaName) self.assertGreater(retinas[0].numberOfTermsInRetina, 50000) def testException(self): exceptionOccurred = False try: self.client.getRetinas("nonexisting_retina") except CorticalioException: exceptionOccurred = True self.assertTrue(exceptionOccurred)
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 TestClientCompareApi(unittest.TestCase): def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME) def testCompare(self): resultMetric = self.client.compare(inputJSONarray) self.assertGreater(resultMetric.cosineSimilarity, 0.1) self.assertGreater(resultMetric.euclideanDistance, 0.1) self.assertGreater(resultMetric.jaccardDistance, 0.1) self.assertGreater(resultMetric.weightedScoring, 0.1) self.assertGreater(resultMetric.sizeRight, 10) self.assertGreater(resultMetric.sizeLeft, 10) self.assertGreater(resultMetric.overlappingLeftRight, 0.1) self.assertGreater(resultMetric.overlappingAll, 10) self.assertGreater(resultMetric.overlappingRightLeft, 0.1) def testCompareBulk(self): resultMetricList = self.client.compareBulk(bulkJSONarray) self.assertEqual(len(resultMetricList), 2) for resultMetric in resultMetricList: self.assertGreater(resultMetric.cosineSimilarity, 0.1) self.assertGreater(resultMetric.euclideanDistance, 0.1) self.assertGreater(resultMetric.jaccardDistance, 0.1) self.assertGreater(resultMetric.weightedScoring, 0.1) self.assertGreater(resultMetric.sizeRight, 10) self.assertGreater(resultMetric.sizeLeft, 10) self.assertGreater(resultMetric.overlappingLeftRight, 0.1) self.assertGreater(resultMetric.overlappingAll, 10) self.assertGreater(resultMetric.overlappingRightLeft, 0.1) def testException(self): # testing using only one input element in the array expectedException = False try: self.client.compare(oneTermInputJSONarray) except CorticalioException: expectedException = True self.assertTrue(expectedException) # testing JSON parse exception in the input expectedException = False try: self.client.compare(syntaxErrorJSONarray) except CorticalioException: expectedException = True self.assertTrue(expectedException)
def setUp(self): self.client = FullClient(apiKey=conf.API_KEY, apiServer=conf.BASE_PATH, retinaName=conf.RETINA_NAME)
def __init__(self, apiKey): self._fullClient = FullClient(apiKey, apiServer="http://api.cortical.io/rest", retinaName="en_associative")
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)
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