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 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)
Beispiel #4
0
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())
Beispiel #6
0
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")
Beispiel #7
0
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)
Beispiel #8
0
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)
Beispiel #11
0
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)
Beispiel #14
0
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
Beispiel #18
0
 def setUp(self):
     self.client = FullClient(apiKey=conf.API_KEY,
                              apiServer=conf.BASE_PATH,
                              retinaName=conf.RETINA_NAME)
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)
Beispiel #20
0
 def __init__(self, apiKey):
     self._fullClient = FullClient(apiKey,
                                   apiServer="http://api.cortical.io/rest",
                                   retinaName="en_associative")
Beispiel #21
0
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
 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())