Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Using Google Artificial Intelligence Services in Couchbase N1QL

DZone's Guide to

Using Google Artificial Intelligence Services in Couchbase N1QL

Couchbase N1QL app=s can use Google ML APIs to improve CX. CURL() provides a flexible method to use the AI services not only from Google but also from other vendors.

· AI Zone ·
Free Resource

Insight for I&O leaders on deploying AIOps platforms to enhance performance monitoring today. Read the Guide.

"If you're not using deep learning, you should be." — Jeff Dean, Google Fellow.

Google has started out with a mission to empower everything and everyone with artificial intelligence (AI). It has open-sourced Tensorflow and supporting libraries to enable developers and enterprises to build and train models, and infer (predict) using those. Building useful enterprise services with this may take time.

Google has also exposed many of the AI services (via Cloud Machine Learning APIs) that can be quite useful in your applications. Extracting features and text from images, translating text from one language to another, and doing sentiment analysis on text can help improve user experience dramatically. There are new businesses and business models enabled by these services alone. Google has done the hard work of building and training the model. You simply call a REST API to exploit their machine learning APIs. These APIs simply act as a declarative service invocation method without needed to understand or maintain the deep infrastructure underneath.

Their machine learning APIs include:

  1. Google Vision API
  2. Google Speech API
  3. Google Natural Language API
  4. Google Translation API
  5. Google Video Intelligence API
  6. And probably many more services by the time this gets published.

These are all provided as REST APIs. See the Google site below for documentation and details of the service.

Image title

In Couchbase 5.0, N1QL R&D engineer, Isha Kandaswamy has developed and has written about the CURL() functionality. Using  CURL(), you can use any of REST services with JSON endpoint. An example of using the Google Map API is shown here. The JSON result from the services can be naturally processed in N1QL because N1QL is designed to be SQL for JSON.

Note: You can use CURL() to use AI or other services from any publicly available service.

This blog shows the way to use Google Cloud AI API directly on the data you have in Couchbase, directly with a simple N1QL statement. All of the Google Cloud Machine Learning APIs return JSON. So, CURL() can be used to call any of the services. I'll show you examples of using Google Vision API, Google translation API, and Google Natural Language API.

Note: You need to setup your project and enable each of the services and obtain the API-KEY which you need to pass. In the examples below, I've removed my key. You should replace PUT YOUR KEY HERE with your key.

Let's explore using some of the APIs.

1. Using Google Vision API

You could be an insurance company where customers upload photos of their cars and identifications. You could be a college receiving images of transcripts. You want to extract the text in the image for veracity, for improved user experience, and to make it easier to search for those when needed.

Google has gone from organizing the world's text to the world's multi-media content. Vision API gives you powerful features to extract a lot of metadata within an image and correlate that information to information and other images available on the web.

Let's get the full analysis of the image using Google Vision API.

select imagetext 
from curl("https://vision.googleapis.com/v1/images:annotate?key=PUT YOUR KEY HERE", 
         {"request": "POST", 
          "header":"Content-Type: application/json", 
           "data": '{ "requests": [ { "image": { "source": { "imageUri": "https://blog.couchbase.com/wp-content/uploads/2018/01/Screen-Shot-2018-01-21-at-6.50.38-PM.png" } }, "features": [ { "type": "TEXT_DETECTION" } ] } ] }'}) AS imagetext

This query returns a huge 120K response describing all the polygons, associated texts. Here's the response. Let's issue the query again to and project the things we need. Vision API returns the concatenated list of strings. You can use the SPLIT() or TOKENS() function of N1QL to get each string separately.

select r.fullTextAnnotation.text 
from curl("https://vision.googleapis.com/v1/images:annotate?key=PUT YOUR KEY HERE", 
{"request": "POST", "header":"Content-Type: application/json", "data": '{ "requests": [ { "image": { "source": { "imageUri": "https://blog.couchbase.com/wp-content/uploads/2018/01/Screen-Shot-2018-01-21-at-6.50.38-PM.png" } }, "features": [ { "type": "TEXT_DETECTION" } ] } ] }'}) 
   AS imagetext UNNEST imagetext.responses r ;

{
    "requestID": "c1e41d74-2522-4de9-84ef-2730cae1aebc",
    "signature": {
        "text": "json"
    },
    "results": [
        {
            "text": "APPLICATION SERVER\nAPPLICATION SERVER\nCLIENT LIBRARY\nCLIENT LIBRARY\nSDK\nSDK\nCluster\nManager\nCluster\nManager\nCluster\nManager\nCluster\nManager\nCluster\nManager\nData\nService\nQuery\nService\nIndex\nService\nSearch\nService\nAnalytics\nService*\nManaged Cache\nStorage\nCouchbase Server 1\nManaged Cache\nStorage\nCouchbase Server 3\nManaged Cache\nStorage\nCouchbase Server 4\nManaged Cache\nStorage\nCouchbase Server\nCouchbase Server\nServer Cluster\n"
        }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "1.906194164s",
        "executionTime": "1.906166141s",
        "resultCount": 1,
        "resultSize": 499
    }
}

2. Google Translation API

This API does what it says: Translate from one language to another. It can automatically detect the source language. Arguments to this API is simply the source content and target language. In this example, let's translate the customer reviews for a hotel from English to French.

 SELECT ginfo
FROM  ( 
     SELECT r.content as english, curl("https://translation.googleapis.com/language/translate/v2?key=PUT YOUR KEYS HERE",
     {"request": "POST", "header":"Content-Type: application/json",
     "data": mydata })  AS french
     FROM `travel-sample` h USE KEYS "hotel_10142" UNNEST  h.reviews r
     LET mydata = '{ "q":"' || r.content || '", "target": "fr"}') AS ginfo;

The result of the query, which includes translation to French is:

{
    "requestID": "a388a2a4-da40-42df-9af6-93a83f8f3cf1",
    "signature": {
        "ginfo": "json"
    },
    "results": [
        {
            "ginfo": {
                "english": "This has got to be the worse experience I have ever had at a hotel. Our reservation was placed two months in advance for a non-smoking room with two beds from July 2-7, 2010. We are staying five nights at $190 a night and this is what we got, a smoking room with one bed, and was only told at the front desk that it was going to be a smoking room, nothing about the one bed, when she asked us how many beds we needed, oh they provided a roll-a-way, only thing is I had to move the chair into the hallway to fit the bed. The t.v. was older than me and the speaker was shot. the bathroom was so small you have to step into the tub to close the door, no fridge in the room, doors are cheap and horrible. only sheets on the bed no blankets/quilts, plus on top of that, i had to pay $14.95 a night for internet. I will never recommend this hotel! how can you take a reservation and state that it will be held till 10am the following morning, yet not provide what was requested in the reservation? What if someone in my party was allergic to smoke, asthmatic, or worse... we wouldn't have gotten a room? completely unacceptable no wonder I will continue to stay at the comfort suites... free internet, modern amenities(flat screens) oh and $85 a night. unsatisfied doesn't even come close to how I feel. the only good thing out of this whole stay was the hot cookie when I got here and mine wasn't even hot. You can take that cookie and... well i'm sure you can figure out the rest. Thanx for nothing!",
                "french": {
                    "data": {
                        "translations": [
                            {
                                "detectedSourceLanguage": "en",
                                "translatedText": "Cela doit être la pire expérience que j'ai jamais eu dans un hôtel. Notre réservation a été placée deux mois à l'avance pour une chambre non-fumeurs avec deux lits du 2 au 7 juillet 2010. Nous restons cinq nuits à 190 $ la nuit et c'est ce que nous avons eu, une chambre fumeurs avec un lit, et On m'a seulement dit à la réception que ça allait être une chambre fumeur, rien à propos du lit, quand elle nous a demandé combien de lits nous avions besoin, oh ils ont fourni un roll-a-way, seule chose que je devais déplacer le Chaise dans le couloir pour s'adapter au lit. La télé était plus vieille que moi et l'orateur a été abattu. La salle de bain était si petite que vous devez marcher dans la baignoire pour fermer la porte, pas de frigo dans la chambre, les portes sont bon marché et horrible. seulement des draps sur le lit pas de couvertures / couettes, en plus de cela, j'ai dû payer 14,95 $ la nuit pour internet. Je ne recommanderai jamais cet hôtel! Comment pouvez-vous prendre une réservation et indiquer qu'il se tiendra jusqu'à 10 heures du matin le lendemain, mais ne pas fournir ce qui était demandé dans la réservation? Et si quelqu'un de mon groupe était allergique à la fumée, asthmatique ou pire ... nous n'aurions pas eu de chambre? complètement inacceptable pas étonnant je vais continuer à rester dans les suites de confort ... Internet gratuit, des équipements modernes (écrans plats) oh et 85 $ la nuit. insatisfait ne se rapproche même pas de ce que je ressens. La seule bonne chose de tout ce séjour était le cookie chaud quand je suis arrivé et le mien n'était même pas chaud. Vous pouvez prendre ce cookie et ... eh bien, je suis sûr que vous pouvez comprendre le reste. Merci pour rien!"
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "english": "OK - I booked this place about 8 weeks prior to travel, when the rooms were still $116 for a Saturday night on Doubletree/Hilton site. As the travel date drew close, I would reprice and the rate climbed to over $200. $116 was a bargain, but the place isn't worth $200. I had room 1022 - very small, some mildew on in the closet in the corner, and right down the hall from the housekeeping closets (they banged their doors day and night). The bed was comfortable and the staff was very courteous. I didn't know this when I booked the hotel, but I was thrilled to see it was at the same intersection as Harrah's Casino so I lost $50. The hotel is also right at a trolley car stop on Canal Street. $116 - yep, I'ld stay there again in a heartbeat. $200 - no can do. Book early and tolerate the inconveniences in exchange for a bargain price.",
                "french": {
                    "data": {
                        "translations": [
                            {
                                "detectedSourceLanguage": "en",
                                "translatedText": "D'accord, j'ai réservé cet hôtel environ 8 semaines avant de partir, quand les chambres étaient toujours 116 pour un samedi soir sur Doubletree / Hilton. Comme la date du voyage se rapprochait, je voudrais réévaluer et le taux a grimpé à plus de 200 $. 116 $ était une bonne affaire, mais l'endroit ne vaut pas 200 $. J'avais la chambre 1022 - très petite, un peu de moisissure dans le placard dans le coin, et juste dans le couloir des placards de ménage (ils ont frappé leurs portes jour et nuit). Le lit était confortable et le personnel était très courtois. Je ne savais pas cela quand j'ai réservé cet hôtel, mais j'ai été ravi de voir que c'était au même carrefour que Harrah's Casino, j'ai perdu 50 $. L'hôtel est également juste à côté d'un arrêt de tramway sur Canal Street. 116 $ - oui, j'y retournerais sans hésiter. 200 $ - ne peut pas faire. Réservez tôt et tolérer les inconvénients en échange d'un prix d'aubaine."
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "english": "I was impressed with my room and the great service I received at the front desk. I found the staff helpful and very pleasant. The location was great with easy walking distances to the French Quarter, other points of interest and great restaurants in the immediate area. Room service was on time and my breakfast arrived hot and ready to enjoy. I would recommend this hotel for the start of a great stay in Big Easy.",
                "french": {
                    "data": {
                        "translations": [
                            {
                                "detectedSourceLanguage": "en",
                                "translatedText": "J'ai été impressionné par ma chambre et le super service que j'ai reçu à la réception. J'ai trouvé le personnel serviable et très agréable. L'emplacement était génial, à quelques minutes de marche du quartier français, d'autres points d'intérêt et d'excellents restaurants dans les environs immédiats. Le service de chambre était à l'heure et mon petit déjeuner est arrivé chaud et prêt à profiter. Je recommande cet hôtel pour le début d'un excellent séjour à Big Easy."
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "english": "The hotel is located conveniently on Canal Street at the edge of the French Quarter near the river. When we arrived, the rooms were ready to go and checking was painless, the cookies were awesome! The louge downstairs was a good place to catch a drink before heading out each night. We were within walking distance to everything in the French Quarter and catching a cab in front of the hotel was easy. The trolley has a stop in front of the hotel, Harrah's is next door, the aquarium , the mall and a move theater are all across the street. The hotel restaurant was good, not the best considering it's New Orleans, but good for hotel food. I didn't have a car this trip, but you have to pay for parking in most places in the quarter. The pool is small, but nice to hang out at mid afternoon and there is a small gym for a quick work out. I've staryed in many places in the French Quarter over the years and this is one of the better experiences I have had. I was pleasantly suprizes at how much I liked the location.",
                "french": {
                    "data": {
                        "translations": [
                            {
                                "detectedSourceLanguage": "en",
                                "translatedText": "L'hôtel est idéalement situé sur Canal Street, au bord du quartier français près de la rivière. Quand nous sommes arrivés, les chambres étaient prêtes à partir et les formalités de départ étaient indolores, les cookies étaient géniaux! Le rez-de-chaussée était un bon endroit pour prendre un verre avant de partir chaque nuit. Nous étions à distance de marche de tout dans le quartier français et prendre un taxi en face de l'hôtel était facile. Le tramway s'arrête devant l'hôtel, Harrah est à côté, l'aquarium, le centre commercial et un théâtre de déménagement sont tous de l'autre côté de la rue. Le restaurant de l'hôtel était bien, pas le meilleur étant donné que c'est la Nouvelle-Orléans, mais bon pour la nourriture de l'hôtel. Je n'avais pas de voiture ce voyage, mais vous devez payer pour le stationnement dans la plupart des endroits dans le quartier. La piscine est petite, mais agréable de sortir en milieu d'après-midi et il y a une petite salle de gym pour faire du sport. Je me suis entretenu dans de nombreux endroits dans le quartier français au cours des années et c'est l'une des meilleures expériences que j'ai eu. J'ai été agréablement suprizes à quel point j'ai aimé l'emplacement."
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "english": "The Doubltree is located near so many attractions, we hardly ever needed a cab the whole time we were there. Clean rooms that were well maintained were a treat to come home to after a long day. I never experienced one issue or problem the entire time I was there, from a warm a welcoming check-in (with a great cookie!) to an efficent check-out. I would certainly reccomend the hotel to anyone I knew that was traveling to the Big Easy.",
                "french": {
                    "data": {
                        "translations": [
                            {
                                "detectedSourceLanguage": "en",
                                "translatedText": "Le Doubltree est situé près de tant d'attractions, nous n'avons presque jamais eu besoin d'un taxi pendant tout notre séjour. Les chambres propres qui étaient bien entretenues étaient un régal pour rentrer à la maison après une longue journée. Je n'ai jamais connu un problème ou problème tout le temps où j'étais là-bas, d'un accueil chaleureux (avec un bon cookie!) À un départ efficace. Je recommanderais cet hôtel à tous ceux que je connaissais qui voyageaient au Big Easy."
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "english": "We stayed at the Doubletree Hotel New Orleans for the first time on February 14, 2009. The good: check in was quick, the rooms were comfortable and very clean. I forgot some amenities and staff were very quick to respond with bringing up what I needed. All staff were very polite. One bad: the walls are paper thin, you can literally hear every word in the rooms next to you and in the hallway. I would stay here again for the ideal location, but if you need a good nights rest, reconsider due to noise.",
                "french": {
                    "data": {
                        "translations": [
                            {
                                "detectedSourceLanguage": "en",
                                "translatedText": "Nous avons séjourné au Doubletree Hotel New Orleans pour la première fois le 14 février 2009. Le bon: l'enregistrement a été rapide, les chambres étaient confortables et très propres. J'ai oublié quelques équipements et le personnel était très rapide pour répondre à ce que j'ai besoin de ce dont j'avais besoin. Tout le personnel était très poli. Un mauvais: les murs sont très fins, vous pouvez littéralement entendre chaque mot dans les chambres à côté de vous et dans le couloir. Je reviendrais ici pour l'emplacement idéal, mais si vous avez besoin de bonnes nuits de repos, reconsidérer à cause du bruit."
                            }
                        ]
                    }
                }
            }
        }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "3.604491133s",
        "executionTime": "3.604475374s",
        "resultCount": 6,
        "resultSize": 13090
    }
}

Since I don't understand French well, I had the review translated to Kannada, my mother tongue. I must say, the translation was decent for a machine. Some sentences were convoluted (almost sounded old Kannada), but overall understandable. Here's that translation.

> SELECT ginfo
     FROM  (
         select r.content, curl("https://translation.googleapis.com/language/translate/v2?key=PUT YOUR KEY HERE",
         {"request": "POST", "header":"Content-Type: application/json",
         "data": mydata })  as kannada
         from `travel-sample` h use keys "hotel_10142" unnest h.reviews r
         LET mydata = '{ "q":"' || r.content || '", "source": "en", "target": "kn"}') ginfo;
{
    "requestID": "079f9dba-2da2-4941-b1be-70865997ec51",
    "signature": {
        "ginfo": "json"
    },
    "results": [
        {
            "ginfo": {
                "content": "This has got to be the worse experience I have ever had at a hotel. Our reservation was placed two months in advance for a non-smoking room with two beds from July 2-7, 2010. We are staying five nights at $190 a night and this is what we got, a smoking room with one bed, and was only told at the front desk that it was going to be a smoking room, nothing about the one bed, when she asked us how many beds we needed, oh they provided a roll-a-way, only thing is I had to move the chair into the hallway to fit the bed. The t.v. was older than me and the speaker was shot. the bathroom was so small you have to step into the tub to close the door, no fridge in the room, doors are cheap and horrible. only sheets on the bed no blankets/quilts, plus on top of that, i had to pay $14.95 a night for internet. I will never recommend this hotel! how can you take a reservation and state that it will be held till 10am the following morning, yet not provide what was requested in the reservation? What if someone in my party was allergic to smoke, asthmatic, or worse... we wouldn't have gotten a room? completely unacceptable no wonder I will continue to stay at the comfort suites... free internet, modern amenities(flat screens) oh and $85 a night. unsatisfied doesn't even come close to how I feel. the only good thing out of this whole stay was the hot cookie when I got here and mine wasn't even hot. You can take that cookie and... well i'm sure you can figure out the rest. Thanx for nothing!",
                "kannada": {
                    "data": {
                        "translations": [
                            {
                                "translatedText": "ಹೋಟೆಲ್ನಲ್ಲಿ ನಾನು ಹೊಂದಿದ್ದ ಕೆಟ್ಟ ಅನುಭವ ಎಂದು ಇದು ತಿಳಿದು ಬಂದಿದೆ. ನಮ್ಮ ಕಾಯ್ದಿರಿಸುವಿಕೆ ಎರಡು ತಿಂಗಳ ಮುಂಚಿತವಾಗಿ ಜುಲೈ 2, 7 ರಿಂದ 2010 ರವರೆಗೆ ಎರಡು ಹಾಸಿಗೆಯೊಂದಿಗೆ ಧೂಮಪಾನ ಕೊಠಡಿಯನ್ನು ಇರಿಸಿದೆ. ನಾವು ರಾತ್ರಿಗೆ $ 190 ಗೆ ಐದು ರಾತ್ರಿಗಳು ಇರುತ್ತಿದ್ದೇವೆ ಮತ್ತು ಇದು ನಮಗೆ ಸಿಕ್ಕಿತು, ಒಂದು ಹಾಸಿಗೆಯೊಂದಿಗೆ ಧೂಮಪಾನ ಕೊಠಡಿ, ಕೇವಲ ಮುಂಭಾಗದ ಮೇಜಿನ ಬಳಿ ಅದು ಧೂಮಪಾನ ಕೊಠಡಿ ಎಂದು ಹೇಳುತ್ತಿದ್ದೆವು, ಒಂದು ಹಾಸಿಗೆಯ ಬಗ್ಗೆ ಏನೂ ಇಲ್ಲ, ನಮಗೆ ಎಷ್ಟು ಹಾಸಿಗೆಗಳು ಬೇಕಾಗಿವೆ ಎಂದು ಕೇಳಿದಾಗ, ಅವರು ರೋಲ್-ಎ-ವೇವನ್ನು ಒದಗಿಸಿದರು, ಕೇವಲ ವಿಷಯ ನಾನು ಹಾಸಿಗೆಯನ್ನು ಹೊಂದಲು ಹಜಾರದ ಒಳಗೆ ಕುರ್ಚಿ. ಟಿವಿ ನನ್ನಂತೆಯೇ ಹಳೆಯದು ಮತ್ತು ಸ್ಪೀಕರ್ ಚಿತ್ರೀಕರಿಸಲಾಯಿತು. ಬಾತ್ರೂಮ್ ಚಿಕ್ಕದಾಗಿದೆ, ಬಾಗಿಲನ್ನು ಮುಚ್ಚಲು ನೀವು ಟಬ್ಬಿನೊಳಗೆ ಹೆಜ್ಜೆ ಹಾಕಬೇಕು, ಕೋಣೆಯಲ್ಲಿ ಯಾವುದೇ ಫ್ರಿಜ್ ಇಲ್ಲ, ಬಾಗಿಲು ಅಗ್ಗವಾಗಿದ್ದು ಭಯಾನಕವಾಗಿದೆ. ಹಾಸಿಗೆಯ ಮೇಲೆ ಮಾತ್ರ ಹಾಳೆಗಳು ಕಂಬಳಿಗಳು / ಕ್ವಿಲ್ಟ್ಸ್ ಮಾತ್ರವಲ್ಲ, ಅದರ ಮೇಲೆ, ನಾನು ಅಂತರ್ಜಾಲಕ್ಕಾಗಿ $ 14.95 ರಷ್ಟು ಹಣವನ್ನು ಪಾವತಿಸಬೇಕಾಯಿತು. ನಾನು ಈ ಹೋಟೆಲ್ಗೆ ಎಂದಿಗೂ ಶಿಫಾರಸು ಮಾಡುವುದಿಲ್ಲ! ಮುಂದಿನ ದಿನ ಬೆಳಿಗ್ಗೆ 10 ಗಂಟೆಗೆ ನಡೆಯಲಿದೆ ಎಂದು ಮೀಸಲಾತಿ ಮತ್ತು ರಾಜ್ಯವನ್ನು ನೀವು ಹೇಗೆ ತೆಗೆದುಕೊಳ್ಳಬಹುದು, ಆದರೆ ಮೀಸಲಾತಿಯಲ್ಲಿ ಏನು ವಿನಂತಿಸಲಾಗಿದೆ? ನನ್ನ ಪಾರ್ಟಿಯಲ್ಲಿ ಯಾರೋ ಹೊಗೆ, ಅಸ್ತಮ, ಅಥವಾ ಕೆಟ್ಟದ್ದಕ್ಕೆ ಅಲರ್ಜಿಯಾಗಿದ್ದರೆ ... ನಾವು ಒಂದು ಕೊಠಡಿಯನ್ನು ಪಡೆದಿರಲಿಲ್ಲವೆ? ಸಂಪೂರ್ಣವಾಗಿ ಸ್ವೀಕಾರಾರ್ಹವಲ್ಲ ಯಾವುದೇ ಆಶ್ಚರ್ಯ ನಾನು ಸೌಕರ್ಯಗಳಿಗೆ ಕೋಣೆಗಳು ನಲ್ಲಿ ಉಳಿಯಲು ಮುಂದುವರಿಯುತ್ತದೆ ... ಉಚಿತ ಇಂಟರ್ನೆಟ್, ಆಧುನಿಕ ಸೌಕರ್ಯಗಳು (ಫ್ಲಾಟ್ ಪರದೆಗಳು) ಓಹ್ ಮತ್ತು $ 85 ಒಂದು ರಾತ್ರಿ. ಅತೃಪ್ತರಾಗಿದ್ದರೂ ನಾನು ಹೇಗೆ ಭಾವಿಸುತ್ತೇನೆ ಎಂಬುದರ ಹತ್ತಿರ ಬರುವುದಿಲ್ಲ. ನಾನು ಇಲ್ಲಿಗೆ ಬಂದಾಗ ಮತ್ತು ಗಣಿ ಕೂಡ ಬಿಸಿಯಾಗಿರಲಿಲ್ಲವಾದ್ದರಿಂದ ಈ ಸಂಪೂರ್ಣ ವಾಸ್ತವ್ಯದಲ್ಲೇ ಇರುವ ಏಕೈಕ ಒಳ್ಳೆಯದು ಬಿಸಿ ಕುಕೀ. ನೀವು ಆ ಕುಕೀ ತೆಗೆದುಕೊಳ್ಳಬಹುದು ಮತ್ತು ... ಚೆನ್ನಾಗಿ ಉಳಿದಿರುವುದನ್ನು ನೀವು ಲೆಕ್ಕಾಚಾರ ಮಾಡಬಹುದು ಎಂದು ನನಗೆ ಖಾತ್ರಿಯಿದೆ. ಥಾಂಕ್ಸ್ ಏನೂ ಇಲ್ಲ!"
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "content": "OK - I booked this place about 8 weeks prior to travel, when the rooms were still $116 for a Saturday night on Doubletree/Hilton site. As the travel date drew close, I would reprice and the rate climbed to over $200. $116 was a bargain, but the place isn't worth $200. I had room 1022 - very small, some mildew on in the closet in the corner, and right down the hall from the housekeeping closets (they banged their doors day and night). The bed was comfortable and the staff was very courteous. I didn't know this when I booked the hotel, but I was thrilled to see it was at the same intersection as Harrah's Casino so I lost $50. The hotel is also right at a trolley car stop on Canal Street. $116 - yep, I'ld stay there again in a heartbeat. $200 - no can do. Book early and tolerate the inconveniences in exchange for a bargain price.",
                "kannada": {
                    "data": {
                        "translations": [
                            {
                                "translatedText": "ಸರಿ - ಈ ಸ್ಥಳವು ಪ್ರಯಾಣಕ್ಕೆ 8 ವಾರಗಳ ಮುಂಚಿತವಾಗಿ, ಶನಿವಾರ ರಾತ್ರಿ ಡಬಲ್ಟ್ರೀ / ಹಿಲ್ಟನ್ ಸೈಟ್ನಲ್ಲಿ ಕೊಠಡಿಗಳು ಇನ್ನೂ $ 116 ಆಗಿದ್ದಾಗ ನಾನು ಈ ಸ್ಥಳವನ್ನು ಗೊತ್ತು ಮಾಡಿದೆ. ಪ್ರಯಾಣದ ದಿನಾಂಕ ಹತ್ತಿರ ಬಂದಾಗ, ನಾನು ಮರುಪಾವತಿ ಮಾಡುತ್ತೇನೆ ಮತ್ತು ದರವು $ 200 ಕ್ಕಿಂತ ಹೆಚ್ಚಿದೆ. $ 116 ಒಂದು ಚೌಕಾಶಿಯಾಗಿತ್ತು, ಆದರೆ ಸ್ಥಳವು $ 200 ಮೌಲ್ಯದ್ದಾಗಿಲ್ಲ. ನಾನು ಕೋಣೆ 1022 ಅನ್ನು ಹೊಂದಿದ್ದೆ - ಬಹಳ ಚಿಕ್ಕದಾದ, ಕೆಲವು ಮೂಲೆಯಲ್ಲಿರುವ ಶಿಲೀಂಧ್ರ, ಮನೆಮನೆಯ ಮುಚ್ಚುಮರೆಯಿಂದ ಹಾಲ್ ಕೆಳಗೆ ಬಿದ್ದ (ಅವರು ದಿನ ಮತ್ತು ರಾತ್ರಿ ತಮ್ಮ ಬಾಗಿಲುಗಳನ್ನು ಹೊಡೆಯುತ್ತಿದ್ದರು). ಹಾಸಿಗೆ ಆರಾಮದಾಯಕ ಮತ್ತು ಸಿಬ್ಬಂದಿ ಬಹಳ ವಿನಯಶೀಲರಾಗಿದ್ದರು. ನಾನು ಹೋಟೆಲ್ ಅನ್ನು ಬುಕ್ ಮಾಡುತ್ತಿರುವಾಗ ನಾನು ಇದನ್ನು ತಿಳಿದಿರಲಿಲ್ಲ, ಆದರೆ ಇದು ಹಾರ್ರಾಹ್ ಕ್ಯಾಸಿನೊದಲ್ಲಿ ಅದೇ ಛೇದಕದಲ್ಲಿದೆ ಎಂದು ನನಗೆ ಥ್ರಿಲ್ಡ್ ಮಾಡಲಾಯಿತು, ಹಾಗಾಗಿ ನಾನು $ 50 ಕಳೆದುಕೊಂಡೆ. ಕಾನಾಲ್ ಸ್ಟ್ರೀಟ್ನಲ್ಲಿರುವ ಟ್ರಾಲಿ ಕಾರ್ ಸ್ಟಾಪ್ನಲ್ಲಿ ಹೋಟೆಲ್ ಸಹ ಸರಿಯಾಗಿದೆ. $ 116 - ಹೌದು, ನಾನು ಮತ್ತೆ ಹೃದಯ ಬಡಿತದಲ್ಲಿ ಇರುತ್ತೇನೆ. $ 200 - ಇಲ್ಲ. ಚೌಕಾಶಿ ಬೆಲೆಗೆ ವಿನಿಮಯವಾಗಿ ಅನನುಕೂಲತೆಗಳನ್ನು ಪ್ರಾರಂಭಿಸಿ ಮತ್ತು ಸಹಿಸಿಕೊಳ್ಳಿ."
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "content": "I was impressed with my room and the great service I received at the front desk. I found the staff helpful and very pleasant. The location was great with easy walking distances to the French Quarter, other points of interest and great restaurants in the immediate area. Room service was on time and my breakfast arrived hot and ready to enjoy. I would recommend this hotel for the start of a great stay in Big Easy.",
                "kannada": {
                    "data": {
                        "translations": [
                            {
                                "translatedText": "ನನ್ನ ಕೊಠಡಿ ಮತ್ತು ನಾನು ಮುಂಭಾಗದ ಮೇಜಿನ ಬಳಿ ಪಡೆದ ಅತ್ಯುತ್ತಮ ಸೇವೆಯಿಂದ ಪ್ರಭಾವಿತನಾಗಿದ್ದೆ. ನಾನು ಸಿಬ್ಬಂದಿ ಸಹಾಯಕವಾಗಿದೆಯೆ ಮತ್ತು ಅತ್ಯಂತ ಆಹ್ಲಾದಕರ ಎಂದು ಕಂಡುಬಂದಿಲ್ಲ. ಈ ಸ್ಥಳವು ಫ್ರೆಂಚ್ ಕ್ವಾರ್ಟರ್ಗೆ ಸುಲಭ ವಾಕಿಂಗ್ ದೂರದೊಂದಿಗೆ, ಇತರ ಪ್ರದೇಶದ ಆಸಕ್ತಿಗಳು ಮತ್ತು ತಕ್ಷಣದ ಪ್ರದೇಶದ ದೊಡ್ಡ ರೆಸ್ಟೊರೆಂಟ್ಗಳೊಂದಿಗೆ ಉತ್ತಮವಾಗಿತ್ತು. ರೂಮ್ ಸೇವೆಯು ಸಮಯಕ್ಕೆ ಇತ್ತು ಮತ್ತು ನನ್ನ ಉಪಹಾರವು ಬಿಸಿಯಾಗಿ ಬಂದು ಆನಂದಿಸಲು ಸಿದ್ಧವಾಗಿದೆ. ಬಿಗ್ ಈಸಿನಲ್ಲಿ ಉತ್ತಮ ವಾಸ್ತವ್ಯದ ಪ್ರಾರಂಭಕ್ಕಾಗಿ ನಾನು ಈ ಹೋಟೆಲ್ ಅನ್ನು ಶಿಫಾರಸು ಮಾಡಿದ್ದೇನೆ."
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "content": "The hotel is located conveniently on Canal Street at the edge of the French Quarter near the river. When we arrived, the rooms were ready to go and checking was painless, the cookies were awesome! The louge downstairs was a good place to catch a drink before heading out each night. We were within walking distance to everything in the French Quarter and catching a cab in front of the hotel was easy. The trolley has a stop in front of the hotel, Harrah's is next door, the aquarium , the mall and a move theater are all across the street. The hotel restaurant was good, not the best considering it's New Orleans, but good for hotel food. I didn't have a car this trip, but you have to pay for parking in most places in the quarter. The pool is small, but nice to hang out at mid afternoon and there is a small gym for a quick work out. I've staryed in many places in the French Quarter over the years and this is one of the better experiences I have had. I was pleasantly suprizes at how much I liked the location.",
                "kannada": {
                    "data": {
                        "translations": [
                            {
                                "translatedText": "ನದಿಯ ಬಳಿ ಫ್ರೆಂಚ್ ಕ್ವಾರ್ಟರ್ನ ಅಂಚಿನಲ್ಲಿರುವ ಕಾನಾಲ್ ಸ್ಟ್ರೀಟ್ನಲ್ಲಿ ಈ ಹೋಟೆಲ್ ಅನುಕೂಲಕರವಾಗಿ ಇದೆ. ನಾವು ಬಂದಾಗ ಕೊಠಡಿಗಳು ಹೋಗಲು ಸಿದ್ಧವಾಗಿದ್ದವು ಮತ್ತು ನೋವುರಹಿತವಾಗಿದ್ದವು, ಕುಕೀಗಳು ಮನಮೋಹಕವಾಗಿತ್ತು! ಪ್ರತಿ ರಾತ್ರಿ ಶಿರೋನಾಮೆ ಮಾಡುವ ಮೊದಲು ಪಾನೀಯವನ್ನು ಹಿಡಿಯಲು ಉತ್ತಮ ಸ್ಥಳವಾಗಿದೆ. ನಾವು ಫ್ರೆಂಚ್ ಕ್ವಾರ್ಟರ್ನಲ್ಲಿ ಎಲ್ಲದರ ಕಡೆಗೆ ನಡೆಯುತ್ತಿದ್ದೆವು ಮತ್ತು ಹೋಟೆಲ್ ಮುಂದೆ ಕ್ಯಾಬ್ ಅನ್ನು ಹಿಡಿಯುವುದು ಸುಲಭವಾಗಿದೆ. ಹೋಟೆಲ್ ಮುಂದೆ ಮುಂಭಾಗದಲ್ಲಿ ಟ್ರಾಲಿಯು ನಿಲ್ಲುತ್ತದೆ, ಹರ್ರಾಹ್ಸ್ ಮುಂದಿನ ಬಾಗಿಲು, ಅಕ್ವೇರಿಯಂ, ಮಾಲ್ ಮತ್ತು ಚಲಿಸುವ ಥಿಯೇಟರ್ ಎಲ್ಲಾ ಬೀದಿಗಳಲ್ಲಿದೆ. ಹೊಟೇಲ್ ರೆಸ್ಟೊರೆಂಟ್ ಒಳ್ಳೆಯದು, ಅದು ನ್ಯೂ ಒರ್ಲಿಯನ್ಸ್ ಅನ್ನು ಪರಿಗಣಿಸಿಲ್ಲ, ಆದರೆ ಹೋಟೆಲ್ ಆಹಾರಕ್ಕೆ ಉತ್ತಮವಾಗಿದೆ. ನಾನು ಈ ಟ್ರಿಪ್ ಅನ್ನು ಹೊಂದಿಲ್ಲ, ಆದರೆ ಕಾಲುಭಾಗದಲ್ಲಿ ಹೆಚ್ಚಿನ ಸ್ಥಳಗಳಲ್ಲಿ ನೀವು ಪಾರ್ಕಿಂಗ್ಗೆ ಪಾವತಿಸಬೇಕಾಗುತ್ತದೆ. ಪೂಲ್ ಚಿಕ್ಕದಾಗಿದೆ, ಆದರೆ ಮಧ್ಯ ಮಧ್ಯಾಹ್ನ ಹ್ಯಾಂಗ್ ಔಟ್ ಮಾಡಲು ಉತ್ತಮವಾಗಿದೆ ಮತ್ತು ತ್ವರಿತ ಕೆಲಸಕ್ಕಾಗಿ ಸಣ್ಣ ಜಿಮ್ ಇರುತ್ತದೆ. ನಾನು ವರ್ಷಗಳಲ್ಲಿ ಫ್ರೆಂಚ್ ಕ್ವಾರ್ಟರ್ನಲ್ಲಿ ಅನೇಕ ಸ್ಥಳಗಳಲ್ಲಿ ನಿಂತಿರುತ್ತೇನೆ ಮತ್ತು ನಾನು ಹೊಂದಿದ್ದ ಉತ್ತಮ ಅನುಭವಗಳಲ್ಲಿ ಒಂದಾಗಿದೆ. ನಾನು ಸ್ಥಳವನ್ನು ಎಷ್ಟು ಇಷ್ಟಪಟ್ಟಿದ್ದೇನೆಂದರೆ ನನಗೆ ಸಂತೋಷಕರವಾದ ಕೊಡುಗೆಯಾಗಿದೆ."
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "content": "The Doubltree is located near so many attractions, we hardly ever needed a cab the whole time we were there. Clean rooms that were well maintained were a treat to come home to after a long day. I never experienced one issue or problem the entire time I was there, from a warm a welcoming check-in (with a great cookie!) to an efficent check-out. I would certainly reccomend the hotel to anyone I knew that was traveling to the Big Easy.",
                "kannada": {
                    "data": {
                        "translations": [
                            {
                                "translatedText": "ಡಬಲ್ಟ್ರೀ ಹಲವಾರು ಆಕರ್ಷಣೆಗಳ ಬಳಿ ಇದೆ, ನಾವು ಅಲ್ಲಿದ್ದ ಸಂಪೂರ್ಣ ಸಮಯಕ್ಕೆ ಕ್ಯಾಬ್ಗೆ ಬೇಕಾಗಲಿಲ್ಲ. ಸುದೀರ್ಘ ಕಾಲದ ನಂತರ ಮನೆಗೆ ಬರಲು ಒಂದು ಸತ್ಕಾರದ ವಿಧಾನವನ್ನು ಚೆನ್ನಾಗಿ ನಿರ್ವಹಿಸಲಾಗಿರುವ ಸ್ವಚ್ಛ ಕೊಠಡಿಗಳು. ನಾನು ಅಲ್ಲಿದ್ದ ಸಂಪೂರ್ಣ ಸಮಯದ ಒಂದು ಸಮಸ್ಯೆಯನ್ನು ಅಥವಾ ಸಮಸ್ಯೆಯನ್ನು ನಾನು ಅನುಭವಿಸಲಿಲ್ಲ, ಬೆಚ್ಚಗಿನ ಸ್ವಾಗತ ಪರಿಶೀಲನೆಯಿಂದ (ಉತ್ತಮ ಕುಕಿ ಯೊಂದಿಗೆ) ಪರಿಣಾಮಕಾರಿ ಚೆಕ್-ಔಟ್ಗೆ. ನಾನು ಬಿಗ್ ಈಸಿಗೆ ಹೋಗುತ್ತಿದ್ದೇನೆ ಎಂದು ನಾನು ತಿಳಿದಿರುವ ಎಲ್ಲರಿಗೂ ಹೋಟೆಲ್ ಅನ್ನು ಖಂಡಿತವಾಗಿಯೂ ಮರುಸಂಗ್ರಹಿಸುತ್ತೇನೆ."
                            }
                        ]
                    }
                }
            }
        },
        {
            "ginfo": {
                "content": "We stayed at the Doubletree Hotel New Orleans for the first time on February 14, 2009. The good: check in was quick, the rooms were comfortable and very clean. I forgot some amenities and staff were very quick to respond with bringing up what I needed. All staff were very polite. One bad: the walls are paper thin, you can literally hear every word in the rooms next to you and in the hallway. I would stay here again for the ideal location, but if you need a good nights rest, reconsider due to noise.",
                "kannada": {
                    "data": {
                        "translations": [
                            {
                                "translatedText": "ಫೆಬ್ರುವರಿ 14, 2009 ರಂದು ನಾವು ಮೊದಲ ಬಾರಿಗೆ ಡಬ್ಟ್ರೀ ಹೋಟೆಲ್ ನ್ಯೂ ಓರ್ಲಿಯನ್ಸ್ನಲ್ಲಿ ನೆಲೆಸಿದ್ದೇವೆ. ಒಳ್ಳೆಯದು: ಚೆಕ್ ಇನ್ ತ್ವರಿತವಾಗಿದ್ದು, ಕೊಠಡಿಗಳು ಆರಾಮದಾಯಕ ಮತ್ತು ಸ್ವಚ್ಛವಾಗಿರುತ್ತವೆ. ನಾನು ಅಗತ್ಯವಿರುವದನ್ನು ತರುವುದರೊಂದಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸಲು ನಾನು ಕೆಲವು ಸೌಲಭ್ಯಗಳನ್ನು ಮತ್ತು ಸಿಬ್ಬಂದಿಗಳನ್ನು ಶೀಘ್ರವಾಗಿ ಮರೆತಿದ್ದೇನೆ. ಎಲ್ಲಾ ಸಿಬ್ಬಂದಿಗಳು ತುಂಬಾ ಮನೋಭಾವ ಹೊಂದಿದ್ದರು. ಒಂದು ಕಳಪೆ: ಗೋಡೆಗಳು ಕಾಗದದ ತೆಳುವಾದವು, ನಿಮಗೆ ಮುಂದಿನ ಮತ್ತು ಹಜಾರದ ಕೋಣೆಗಳಲ್ಲಿ ಪ್ರತಿಯೊಂದು ಶಬ್ದವನ್ನೂ ನೀವು ಅಕ್ಷರಶಃ ಕೇಳಬಹುದು. ನಾನು ಸೂಕ್ತ ಸ್ಥಳಕ್ಕಾಗಿ ಮತ್ತೆ ಇಲ್ಲಿಯೇ ಇರುತ್ತೇನೆ, ಆದರೆ ನಿಮಗೆ ಒಳ್ಳೆಯ ರಾತ್ರಿಗಳು ಬೇಕಾಗಿದ್ದರೆ, ಶಬ್ದದ ಕಾರಣದಿಂದಾಗಿ ಮರುಪರಿಶೀಲಿಸಿ."
                            }
                        ]
                    }
                }
            }
        }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "3.604226917s",
        "executionTime": "3.604175923s",
        "resultCount": 6,
        "resultSize": 20088
    }
}

3. Google Natural Language API

The natural language API does sentiment analysis and entity analysis, parses the intent, and much more. You can invoke these services just be changing the parameters of the service.

Let's use the hotel review data, which does have some emotional content!

SELECT ginfo.review, ginfo.sentscore.documentSentiment.magnitude, ginfo.sentscore.documentSentiment.score
FROM  (
    SELECT r.content AS review,
          curl("https://language.googleapis.com/v1/documents:analyzeSentiment?key=PUT YOUR KEY HERE",
              {"request": "POST", "header":"Content-Type: application/json", "data": mydata })  AS sentscore
    FROM `travel-sample` h USE KEYS "hotel_10142" UNNEST h.reviews r
    LET mydata = '{ "encodingType": "UTF8", "document": { "type": "PLAIN_TEXT", "content":"' || r.content || '"} }'
    ) ginfo

We've only projected the fields we're interested here, review, magnitude, and sentiment score. See the Google docs for a full description of what these mean and the rest of the data it generates.

{
    "requestID": "c7b66165-3d18-4a61-8b24-732afdd4714a",
    "signature": {
        "magnitude": "json",
        "review": "json",
        "score": "json"
    },
    "results": [
        {
            "magnitude": 8.7,
            "review": "This has got to be the worse experience I have ever had at a hotel. Our reservation was placed two months in advance for a non-smoking room with two beds from July 2-7, 2010. We are staying five nights at $190 a night and this is what we got, a smoking room with one bed, and was only told at the front desk that it was going to be a smoking room, nothing about the one bed, when she asked us how many beds we needed, oh they provided a roll-a-way, only thing is I had to move the chair into the hallway to fit the bed. The t.v. was older than me and the speaker was shot. the bathroom was so small you have to step into the tub to close the door, no fridge in the room, doors are cheap and horrible. only sheets on the bed no blankets/quilts, plus on top of that, i had to pay $14.95 a night for internet. I will never recommend this hotel! how can you take a reservation and state that it will be held till 10am the following morning, yet not provide what was requested in the reservation? What if someone in my party was allergic to smoke, asthmatic, or worse... we wouldn't have gotten a room? completely unacceptable no wonder I will continue to stay at the comfort suites... free internet, modern amenities(flat screens) oh and $85 a night. unsatisfied doesn't even come close to how I feel. the only good thing out of this whole stay was the hot cookie when I got here and mine wasn't even hot. You can take that cookie and... well i'm sure you can figure out the rest. Thanx for nothing!",
            "score": -0.4
        },
        {
            "magnitude": 4.1,
            "review": "OK - I booked this place about 8 weeks prior to travel, when the rooms were still $116 for a Saturday night on Doubletree/Hilton site. As the travel date drew close, I would reprice and the rate climbed to over $200. $116 was a bargain, but the place isn't worth $200. I had room 1022 - very small, some mildew on in the closet in the corner, and right down the hall from the housekeeping closets (they banged their doors day and night). The bed was comfortable and the staff was very courteous. I didn't know this when I booked the hotel, but I was thrilled to see it was at the same intersection as Harrah's Casino so I lost $50. The hotel is also right at a trolley car stop on Canal Street. $116 - yep, I'ld stay there again in a heartbeat. $200 - no can do. Book early and tolerate the inconveniences in exchange for a bargain price.",
            "score": 0.1
        },
        {
            "magnitude": 4.5,
            "review": "I was impressed with my room and the great service I received at the front desk. I found the staff helpful and very pleasant. The location was great with easy walking distances to the French Quarter, other points of interest and great restaurants in the immediate area. Room service was on time and my breakfast arrived hot and ready to enjoy. I would recommend this hotel for the start of a great stay in Big Easy.",
            "score": 0.9
        },
        {
            "magnitude": 5.9,
            "review": "The hotel is located conveniently on Canal Street at the edge of the French Quarter near the river. When we arrived, the rooms were ready to go and checking was painless, the cookies were awesome! The louge downstairs was a good place to catch a drink before heading out each night. We were within walking distance to everything in the French Quarter and catching a cab in front of the hotel was easy. The trolley has a stop in front of the hotel, Harrah's is next door, the aquarium , the mall and a move theater are all across the street. The hotel restaurant was good, not the best considering it's New Orleans, but good for hotel food. I didn't have a car this trip, but you have to pay for parking in most places in the quarter. The pool is small, but nice to hang out at mid afternoon and there is a small gym for a quick work out. I've staryed in many places in the French Quarter over the years and this is one of the better experiences I have had. I was pleasantly suprizes at how much I liked the location.",
            "score": 0.5
        },
        {
            "magnitude": 3.3,
            "review": "The Doubltree is located near so many attractions, we hardly ever needed a cab the whole time we were there. Clean rooms that were well maintained were a treat to come home to after a long day. I never experienced one issue or problem the entire time I was there, from a warm a welcoming check-in (with a great cookie!) to an efficent check-out. I would certainly reccomend the hotel to anyone I knew that was traveling to the Big Easy.",
            "score": 0.8
        },
        {
            "magnitude": 3.8,
            "review": "We stayed at the Doubletree Hotel New Orleans for the first time on February 14, 2009. The good: check in was quick, the rooms were comfortable and very clean. I forgot some amenities and staff were very quick to respond with bringing up what I needed. All staff were very polite. One bad: the walls are paper thin, you can literally hear every word in the rooms next to you and in the hallway. I would stay here again for the ideal location, but if you need a good nights rest, reconsider due to noise.",
            "score": 0.5
        }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "3.905025161s",
        "executionTime": "3.893259752s",
        "resultCount": 6,
        "resultSize": 5256
    }
}

Google natural language API can also extract entities, their web references. Let's look at an example of that as well.

SELECT ginfo
FROM  (
    SELECT name, content,
          curl("https://language.googleapis.com/v1/documents:analyzeEntities?key=PUT YOUR KEY HERE",
              {"request": "POST", "header":"Content-Type: application/json", "data": mydata })  AS sentscore
    FROM `travel-sample` l USE KEYS "landmark_10087" 
    LET mydata = '{ "encodingType": "UTF8", "document": { "type": "PLAIN_TEXT", "content":"' || l.name || " " || l.content || '"} }'
    ) ginfo

The entity analysis API correctly identifies the location and gives us the web references (URLs) to the landmark. When the references are not quite specific, like the William Team Rooms here, the API can give very high-level generic references.

{
    "requestID": "4e104224-fe2d-43a8-b86f-aca371987d75",
    "signature": {
        "ginfo": "json"
    },
    "results": [
        {
            "ginfo": {
                "content": "During the temperance movement, the idea of "tearooms", places where you could relax and enjoy non-alcoholic refreshments in differently themed rooms, became popular in Glasgow. This one, designed by Charles Rennie Mackintosh in 1904, was the most popular of its time and has been lovingly restored.",
                "name": "Willow Tea Rooms",
                "sentscore": {
                    "entities": [
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 0,
                                        "content": "Willow Tea Rooms"
                                    },
                                    "type": "PROPER"
                                },
                                {
                                    "text": {
                                        "beginOffset": 83,
                                        "content": "places"
                                    },
                                    "type": "COMMON"
                                }
                            ],
                            "metadata": {
                                "mid": "/m/0cpvtc",
                                "wikipedia_url": "https://en.wikipedia.org/wiki/Willow_Tearooms"
                            },
                            "name": "Willow Tea Rooms",
                            "salience": 0.45414653,
                            "type": "LOCATION"
                        },
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 28,
                                        "content": "temperance movement"
                                    },
                                    "type": "COMMON"
                                }
                            ],
                            "metadata": {},
                            "name": "temperance movement",
                            "salience": 0.18415423,
                            "type": "EVENT"
                        },
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 53,
                                        "content": "idea"
                                    },
                                    "type": "COMMON"
                                }
                            ],
                            "metadata": {},
                            "name": "idea",
                            "salience": 0.075759985,
                            "type": "OTHER"
                        },
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 61,
                                        "content": "&quot"
                                    },
                                    "type": "COMMON"
                                }
                            ],
                            "metadata": {},
                            "name": "&quot",
                            "salience": 0.075759985,
                            "type": "OTHER"
                        },
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 171,
                                        "content": "rooms"
                                    },
                                    "type": "COMMON"
                                }
                            ],
                            "metadata": {},
                            "name": "rooms",
                            "salience": 0.059097562,
                            "type": "LOCATION"
                        },
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 136,
                                        "content": "refreshments"
                                    },
                                    "type": "COMMON"
                                }
                            ],
                            "metadata": {},
                            "name": "refreshments",
                            "salience": 0.051312122,
                            "type": "OTHER"
                        },
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 67,
                                        "content": "tearooms&quot"
                                    },
                                    "type": "PROPER"
                                }
                            ],
                            "metadata": {
                                "mid": "/g/11b6hv7vlz",
                                "wikipedia_url": "https://en.wikipedia.org/wiki/Tearoom_(UK_and_US)"
                            },
                            "name": "tearooms&quot",
                            "salience": 0.045740306,
                            "type": "ORGANIZATION"
                        },
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 196,
                                        "content": "Glasgow"
                                    },
                                    "type": "PROPER"
                                }
                            ],
                            "metadata": {
                                "mid": "/m/0hyxv",
                                "wikipedia_url": "https://en.wikipedia.org/wiki/Glasgow"
                            },
                            "name": "Glasgow",
                            "salience": 0.028563324,
                            "type": "LOCATION"
                        },
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 275,
                                        "content": "popular"
                                    },
                                    "type": "COMMON"
                                }
                            ],
                            "metadata": {},
                            "name": "popular",
                            "salience": 0.02095558,
                            "type": "OTHER"
                        },
                        {
                            "mentions": [
                                {
                                    "text": {
                                        "beginOffset": 227,
                                        "content": "Charles Rennie Mackintosh"
                                    },
                                    "type": "PROPER"
                                }
                            ],
                            "metadata": {
                                "mid": "/m/0f7tt",
                                "wikipedia_url": "https://en.wikipedia.org/wiki/Charles_Rennie_Mackintosh"
                            },
                            "name": "Charles Rennie Mackintosh",
                            "salience": 0.0045103845,
                            "type": "PERSON"
                        }
                    ],
                    "language": "en"
                }
            }
        }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "158.149783ms",
        "executionTime": "158.101909ms",
        "resultCount": 1,
        "resultSize": 8125
    }
}

Summary

Couchbase N1QL applications can use Google machine learning APIs easily to improve the customer experience. CURL() provides a flexible method to use the AI services not only from Google but also from other vendors. Try it out.

References

  1. N1QL
  2. CURL() documentation
  3. CURL comes to N1QL

TrueSight is an AIOps platform, powered by machine learning and analytics, that elevates IT operations to address multi-cloud complexity and the speed of digital transformation.

Topics:
ai ,couchbase ,n1ql ,google ,deep learning ,tutorial ,api

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}