--- title: "Google Natural Language API" author: "Mark Edmondson" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Google Natural Language API} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- The Google Natural Language API reveals the structure and meaning of text by offering powerful machine learning models in an easy to use REST API. You can use it to extract information about people, places, events and much more, mentioned in text documents, news articles or blog posts. You can also use it to understand sentiment about your product on social media or parse intent from customer conversations happening in a call center or a messaging app. Read more [on the Google Natural Language API](https://cloud.google.com/natural-language/) The Natural Language API returns natural language understanding technologies. You can call them individually, or the default is to return them all. The available returns are: * *Entity analysis* - Finds named entities (currently proper names and common nouns) in the text along with entity types, salience, mentions for each entity, and other properties. If possible, will also return metadata about that entity such as a Wikipedia URL. * *Syntax* - Analyzes the syntax of the text and provides sentence boundaries and tokenization along with part of speech tags, dependency trees, and other properties. * *Sentiment* - The overall sentiment of the text, represented by a magnitude `[0, +inf]` and score between `-1.0` (negative sentiment) and `1.0` (positive sentiment). * *Content Classification* - Analyzes a document and returns a list of content categories that apply to the text found in the document. A complete list of content categories can be found [here](https://cloud.google.com/natural-language/docs/categories). ### Demo for Entity Analysis You can pass a vector of text which will call the API for each element. The return is a list of responses, each response being a list of tibbles holding the different types of analysis. ```r library(googleLanguageR) # random text form wikipedia texts <- c("Norma is a small constellation in the Southern Celestial Hemisphere between Ara and Lupus, one of twelve drawn up in the 18th century by French astronomer Nicolas Louis de Lacaille and one of several depicting scientific instruments. Its name refers to a right angle in Latin, and is variously considered to represent a rule, a carpenter's square, a set square or a level. It remains one of the 88 modern constellations. Four of Norma's brighter stars make up a square in the field of faint stars. Gamma2 Normae is the brightest star with an apparent magnitude of 4.0. Mu Normae is one of the most luminous stars known, but is partially obscured by distance and cosmic dust. Four star systems are known to harbour planets. ", "Solomon Wariso (born 11 November 1966 in Portsmouth) is a retired English sprinter who competed primarily in the 200 and 400 metres.[1] He represented his country at two outdoor and three indoor World Championships and is the British record holder in the indoor 4 × 400 metres relay.") nlp_result <- gl_nlp(texts) ``` Each text has its own entry in returned tibbles ```r str(nlp_result, max.level = 2) List of 7 $ sentences :List of 2 ..$ :'data.frame': 7 obs. of 4 variables: ..$ :'data.frame': 1 obs. of 4 variables: $ tokens :List of 2 ..$ :'data.frame': 139 obs. of 17 variables: ..$ :'data.frame': 54 obs. of 17 variables: $ entities :List of 2 ..$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 52 obs. of 9 variables: ..$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 8 obs. of 9 variables: $ language : chr [1:2] "en" "en" $ text : chr [1:2] "Norma is a small constellation in the Southern Celestial Hemisphere between Ara and Lupus, one of twelve drawn "| __truncated__ "Solomon Wariso (born 11 November 1966 in Portsmouth) is a retired English sprinter who competed primarily in th"| __truncated__ $ documentSentiment:Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 2 obs. of 2 variables: ..$ magnitude: num [1:2] 2.4 0.1 ..$ score : num [1:2] 0.3 0.1 $ classifyText :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 1 obs. of 2 variables: ..$ name : chr "/Science/Astronomy" ..$ confidence: num 0.93 ``` Sentence structure and sentiment: ```r ## sentences structure nlp_result$sentences[[2]] content 1 Solomon Wariso (born 11 November 1966 in Portsmouth) is a retired English sprinter who competed primarily in the 200 and 400 metres.[1] He represented his country at two outdoor and three indoor World Championships and is the British record holder in the indoor 4 × 400 metres relay. beginOffset magnitude score 1 0 0.1 0.1 ``` Information on what words (tokens) are within each text: ```r # word tokens data str(nlp_result$tokens[[1]]) 'data.frame': 139 obs. of 17 variables: $ content : chr "Norma" "is" "a" "small" ... $ beginOffset : int 0 6 9 11 17 31 34 38 47 57 ... $ tag : chr "NOUN" "VERB" "DET" "ADJ" ... $ aspect : chr "ASPECT_UNKNOWN" "ASPECT_UNKNOWN" "ASPECT_UNKNOWN" "ASPECT_UNKNOWN" ... $ case : chr "CASE_UNKNOWN" "CASE_UNKNOWN" "CASE_UNKNOWN" "CASE_UNKNOWN" ... $ form : chr "FORM_UNKNOWN" "FORM_UNKNOWN" "FORM_UNKNOWN" "FORM_UNKNOWN" ... $ gender : chr "GENDER_UNKNOWN" "GENDER_UNKNOWN" "GENDER_UNKNOWN" "GENDER_UNKNOWN" ... $ mood : chr "MOOD_UNKNOWN" "INDICATIVE" "MOOD_UNKNOWN" "MOOD_UNKNOWN" ... $ number : chr "SINGULAR" "SINGULAR" "NUMBER_UNKNOWN" "NUMBER_UNKNOWN" ... $ person : chr "PERSON_UNKNOWN" "THIRD" "PERSON_UNKNOWN" "PERSON_UNKNOWN" ... $ proper : chr "PROPER" "PROPER_UNKNOWN" "PROPER_UNKNOWN" "PROPER_UNKNOWN" ... $ reciprocity : chr "RECIPROCITY_UNKNOWN" "RECIPROCITY_UNKNOWN" "RECIPROCITY_UNKNOWN" "RECIPROCITY_UNKNOWN" ... $ tense : chr "TENSE_UNKNOWN" "PRESENT" "TENSE_UNKNOWN" "TENSE_UNKNOWN" ... $ voice : chr "VOICE_UNKNOWN" "VOICE_UNKNOWN" "VOICE_UNKNOWN" "VOICE_UNKNOWN" ... $ headTokenIndex: int 1 1 4 4 1 4 9 9 9 5 ... $ label : chr "NSUBJ" "ROOT" "DET" "AMOD" ... $ value : chr "Norma" "be" "a" "small" ... ``` What entities within text have been identified, with optional wikipedia URL if its available. ```r nlp_result$entities [[1]] # A tibble: 52 x 9 name type salience mid wikipedia_url magnitude score beginOffset mention_type 1 angle OTHER 0.0133 NA NA 0 0 261 COMMON 2 Ara ORGANIZATION 0.0631 NA NA 0 0 76 PROPER 3 astronomer NA NA NA NA NA NA 144 COMMON 4 carpenter PERSON 0.0135 NA NA 0 0 328 COMMON 5 constellation OTHER 0.150 NA NA 0 0 17 COMMON 6 constellations OTHER 0.0140 NA NA 0.9 0.9 405 COMMON 7 distance OTHER 0.00645 NA NA 0 0 649 COMMON 8 dust OTHER 0.00645 NA NA 0.3 -0.3 669 COMMON 9 field LOCATION 0.00407 NA NA 0.6 -0.6 476 COMMON 10 French LOCATION 0.0242 NA NA 0 0 137 PROPER # ... with 42 more rows [[2]] # A tibble: 8 x 9 name type salience mid wikipedia_url magnitude score beginOffset mention_type 1 British LOCATION 0.0255 NA NA 0 0 226 PROPER 2 country LOCATION 0.0475 NA NA 0 0 155 COMMON 3 English OTHER 0.0530 NA NA 0 0 66 PROPER 4 Portsmouth LOCATION 0.0530 /m/0619_ https://en.wiki… 0 0 41 PROPER 5 record holder PERSON 0.0541 NA NA 0 0 234 COMMON 6 Solomon Wariso ORGANIZATION 0.156 /g/120x5nf6 https://en.wiki… 0 0 0 PROPER 7 sprinter PERSON 0.600 NA NA 0 0 74 COMMON 8 World Championships EVENT 0.0113 NA NA 0.1 0.1 195 PROPER ``` Sentiment of the entire text: ```r nlp_result$documentSentiment # A tibble: 2 x 2 magnitude score 1 2.4 0.3 2 0.1 0.1 ``` The category for the text as defined by the list [here](https://cloud.google.com/natural-language/docs/categories). ```r nlp_result$classifyText # A tibble: 1 x 2 name confidence 1 /Science/Astronomy 0.93 ``` The language for the text: ```r nlp_result$language # [1] "en" "en" ``` The original passed in text, to aid with working with the output: ```r nlp_result$text [1] "Norma is a small constellation in the Southern Celestial Hemisphere between Ara and Lupus, one of twelve drawn up in the 18th century by French astronomer Nicolas Louis de Lacaille and one of several depicting scientific instruments. Its name refers to a right angle in Latin, and is variously considered to represent a rule, a carpenter's square, a set square or a level. It remains one of the 88 modern constellations. Four of Norma's brighter stars make up a square in the field of faint stars. Gamma2 Normae is the brightest star with an apparent magnitude of 4.0. Mu Normae is one of the most luminous stars known, but is partially obscured by distance and cosmic dust. Four star systems are known to harbour planets." [2] "Solomon Wariso (born 11 November 1966 in Portsmouth) is a retired English sprinter who competed primarily in the 200 and 400 metres.[1] He represented his country at two outdoor and three indoor World Championships and is the British record holder in the indoor 4 × 400 metres relay." ```