xref: /aosp_15_r20/external/google-cloud-java/java-language/README.md (revision 55e87721aa1bc457b326496a7ca40f3ea1a63287)
1*55e87721SMatt Gilbride# Google Natural Language Client for Java
2*55e87721SMatt Gilbride
3*55e87721SMatt GilbrideJava idiomatic client for [Natural Language][product-docs].
4*55e87721SMatt Gilbride
5*55e87721SMatt Gilbride[![Maven][maven-version-image]][maven-version-link]
6*55e87721SMatt Gilbride![Stability][stability-image]
7*55e87721SMatt Gilbride
8*55e87721SMatt Gilbride- [Product Documentation][product-docs]
9*55e87721SMatt Gilbride- [Client Library Documentation][javadocs]
10*55e87721SMatt Gilbride
11*55e87721SMatt Gilbride
12*55e87721SMatt Gilbride## Quickstart
13*55e87721SMatt Gilbride
14*55e87721SMatt Gilbride
15*55e87721SMatt GilbrideIf you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
16*55e87721SMatt Gilbride
17*55e87721SMatt Gilbride```xml
18*55e87721SMatt Gilbride<dependencyManagement>
19*55e87721SMatt Gilbride  <dependencies>
20*55e87721SMatt Gilbride    <dependency>
21*55e87721SMatt Gilbride      <groupId>com.google.cloud</groupId>
22*55e87721SMatt Gilbride      <artifactId>libraries-bom</artifactId>
23*55e87721SMatt Gilbride      <version>26.12.0</version>
24*55e87721SMatt Gilbride      <type>pom</type>
25*55e87721SMatt Gilbride      <scope>import</scope>
26*55e87721SMatt Gilbride    </dependency>
27*55e87721SMatt Gilbride  </dependencies>
28*55e87721SMatt Gilbride</dependencyManagement>
29*55e87721SMatt Gilbride
30*55e87721SMatt Gilbride<dependencies>
31*55e87721SMatt Gilbride  <dependency>
32*55e87721SMatt Gilbride    <groupId>com.google.cloud</groupId>
33*55e87721SMatt Gilbride    <artifactId>google-cloud-language</artifactId>
34*55e87721SMatt Gilbride  </dependency>
35*55e87721SMatt Gilbride```
36*55e87721SMatt Gilbride
37*55e87721SMatt GilbrideIf you are using Maven without the BOM, add this to your dependencies:
38*55e87721SMatt Gilbride
39*55e87721SMatt Gilbride<!-- {x-version-update-start:google-cloud-language:released} -->
40*55e87721SMatt Gilbride
41*55e87721SMatt Gilbride```xml
42*55e87721SMatt Gilbride<dependency>
43*55e87721SMatt Gilbride  <groupId>com.google.cloud</groupId>
44*55e87721SMatt Gilbride  <artifactId>google-cloud-language</artifactId>
45*55e87721SMatt Gilbride  <version>2.18.0</version>
46*55e87721SMatt Gilbride</dependency>
47*55e87721SMatt Gilbride```
48*55e87721SMatt Gilbride
49*55e87721SMatt GilbrideIf you are using Gradle without BOM, add this to your dependencies:
50*55e87721SMatt Gilbride
51*55e87721SMatt Gilbride```Groovy
52*55e87721SMatt Gilbrideimplementation 'com.google.cloud:google-cloud-language:2.18.0'
53*55e87721SMatt Gilbride```
54*55e87721SMatt Gilbride
55*55e87721SMatt GilbrideIf you are using SBT, add this to your dependencies:
56*55e87721SMatt Gilbride
57*55e87721SMatt Gilbride```Scala
58*55e87721SMatt GilbridelibraryDependencies += "com.google.cloud" % "google-cloud-language" % "2.18.0"
59*55e87721SMatt Gilbride```
60*55e87721SMatt Gilbride<!-- {x-version-update-end} -->
61*55e87721SMatt Gilbride
62*55e87721SMatt Gilbride## Authentication
63*55e87721SMatt Gilbride
64*55e87721SMatt GilbrideSee the [Authentication][authentication] section in the base directory's README.
65*55e87721SMatt Gilbride
66*55e87721SMatt Gilbride## Authorization
67*55e87721SMatt Gilbride
68*55e87721SMatt GilbrideThe client application making API calls must be granted [authorization scopes][auth-scopes] required for the desired Natural Language APIs, and the authenticated principal must have the [IAM role(s)][predefined-iam-roles] required to access GCP resources using the Natural Language API calls.
69*55e87721SMatt Gilbride
70*55e87721SMatt Gilbride## Getting Started
71*55e87721SMatt Gilbride
72*55e87721SMatt Gilbride### Prerequisites
73*55e87721SMatt Gilbride
74*55e87721SMatt GilbrideYou will need a [Google Cloud Platform Console][developer-console] project with the Natural Language [API enabled][enable-api].
75*55e87721SMatt GilbrideYou will need to [enable billing][enable-billing] to use Google Natural Language.
76*55e87721SMatt Gilbride[Follow these instructions][create-project] to get your project set up. You will also need to set up the local development environment by
77*55e87721SMatt Gilbride[installing the Google Cloud Command Line Interface][cloud-cli] and running the following commands in command line:
78*55e87721SMatt Gilbride`gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`.
79*55e87721SMatt Gilbride
80*55e87721SMatt Gilbride### Installation and setup
81*55e87721SMatt Gilbride
82*55e87721SMatt GilbrideYou'll need to obtain the `google-cloud-language` library.  See the [Quickstart](#quickstart) section
83*55e87721SMatt Gilbrideto add `google-cloud-language` as a dependency in your code.
84*55e87721SMatt Gilbride
85*55e87721SMatt Gilbride## About Natural Language
86*55e87721SMatt Gilbride
87*55e87721SMatt Gilbride
88*55e87721SMatt Gilbride[Natural Language][product-docs] provides natural language understanding technologies to developers, including sentiment analysis, entity analysis, entity sentiment analysis, content classification, and syntax analysis. This API is part of the larger Cloud Machine Learning API family.
89*55e87721SMatt Gilbride
90*55e87721SMatt GilbrideSee the [Natural Language client library docs][javadocs] to learn how to
91*55e87721SMatt Gilbrideuse this Natural Language Client Library.
92*55e87721SMatt Gilbride
93*55e87721SMatt Gilbride
94*55e87721SMatt Gilbride#### Analyzing sentiment
95*55e87721SMatt GilbrideWith Cloud Natural Language, you can analyze the sentiment of text. Add the following imports at the top of your file:
96*55e87721SMatt Gilbride
97*55e87721SMatt Gilbride``` java
98*55e87721SMatt Gilbrideimport com.google.cloud.language.v1.LanguageServiceClient;
99*55e87721SMatt Gilbrideimport com.google.cloud.language.v1.Document;
100*55e87721SMatt Gilbrideimport com.google.cloud.language.v1.Document.Type;
101*55e87721SMatt Gilbrideimport com.google.cloud.language.v1.Sentiment;
102*55e87721SMatt Gilbride```
103*55e87721SMatt GilbrideThen, to analyze the sentiment of some text, use the following code:
104*55e87721SMatt Gilbride
105*55e87721SMatt Gilbride``` java
106*55e87721SMatt Gilbride// Instantiates a client
107*55e87721SMatt GilbrideLanguageServiceClient language = LanguageServiceClient.create();
108*55e87721SMatt Gilbride
109*55e87721SMatt Gilbride// The text to analyze
110*55e87721SMatt GilbrideString[] texts = {"I love this!", "I hate this!"};
111*55e87721SMatt Gilbridefor (String text : texts) {
112*55e87721SMatt Gilbride  Document doc = Document.newBuilder().setContent(text).setType(Type.PLAIN_TEXT).build();
113*55e87721SMatt Gilbride  // Detects the sentiment of the text
114*55e87721SMatt Gilbride  Sentiment sentiment = language.analyzeSentiment(doc).getDocumentSentiment();
115*55e87721SMatt Gilbride
116*55e87721SMatt Gilbride  System.out.printf("Text: \"%s\"%n", text);
117*55e87721SMatt Gilbride  System.out.printf(
118*55e87721SMatt Gilbride      "Sentiment: score = %s, magnitude = %s%n",
119*55e87721SMatt Gilbride      sentiment.getScore(), sentiment.getMagnitude());
120*55e87721SMatt Gilbride}
121*55e87721SMatt Gilbride```
122*55e87721SMatt Gilbride
123*55e87721SMatt Gilbride#### Complete source code
124*55e87721SMatt Gilbride
125*55e87721SMatt GilbrideIn [AnalyzeSentiment.java](https://github.com/googleapis/google-cloud-java/blob/master/google-cloud-examples/src/main/java/com/google/cloud/examples/language/snippets/AnalyzeSentiment.java) we put the code shown above into a complete program.
126*55e87721SMatt Gilbride
127*55e87721SMatt Gilbride
128*55e87721SMatt Gilbride
129*55e87721SMatt Gilbride
130*55e87721SMatt Gilbride## Troubleshooting
131*55e87721SMatt Gilbride
132*55e87721SMatt GilbrideTo get help, follow the instructions in the [shared Troubleshooting document][troubleshooting].
133*55e87721SMatt Gilbride
134*55e87721SMatt Gilbride## Transport
135*55e87721SMatt Gilbride
136*55e87721SMatt GilbrideNatural Language uses gRPC for the transport layer.
137*55e87721SMatt Gilbride
138*55e87721SMatt Gilbride## Supported Java Versions
139*55e87721SMatt Gilbride
140*55e87721SMatt GilbrideJava 8 or above is required for using this client.
141*55e87721SMatt Gilbride
142*55e87721SMatt GilbrideGoogle's Java client libraries,
143*55e87721SMatt Gilbride[Google Cloud Client Libraries][cloudlibs]
144*55e87721SMatt Gilbrideand
145*55e87721SMatt Gilbride[Google Cloud API Libraries][apilibs],
146*55e87721SMatt Gilbridefollow the
147*55e87721SMatt Gilbride[Oracle Java SE support roadmap][oracle]
148*55e87721SMatt Gilbride(see the Oracle Java SE Product Releases section).
149*55e87721SMatt Gilbride
150*55e87721SMatt Gilbride### For new development
151*55e87721SMatt Gilbride
152*55e87721SMatt GilbrideIn general, new feature development occurs with support for the lowest Java
153*55e87721SMatt GilbrideLTS version covered by  Oracle's Premier Support (which typically lasts 5 years
154*55e87721SMatt Gilbridefrom initial General Availability). If the minimum required JVM for a given
155*55e87721SMatt Gilbridelibrary is changed, it is accompanied by a [semver][semver] major release.
156*55e87721SMatt Gilbride
157*55e87721SMatt GilbrideJava 11 and (in September 2021) Java 17 are the best choices for new
158*55e87721SMatt Gilbridedevelopment.
159*55e87721SMatt Gilbride
160*55e87721SMatt Gilbride### Keeping production systems current
161*55e87721SMatt Gilbride
162*55e87721SMatt GilbrideGoogle tests its client libraries with all current LTS versions covered by
163*55e87721SMatt GilbrideOracle's Extended Support (which typically lasts 8 years from initial
164*55e87721SMatt GilbrideGeneral Availability).
165*55e87721SMatt Gilbride
166*55e87721SMatt Gilbride#### Legacy support
167*55e87721SMatt Gilbride
168*55e87721SMatt GilbrideGoogle's client libraries support legacy versions of Java runtimes with long
169*55e87721SMatt Gilbrideterm stable libraries that don't receive feature updates on a best efforts basis
170*55e87721SMatt Gilbrideas it may not be possible to backport all patches.
171*55e87721SMatt Gilbride
172*55e87721SMatt GilbrideGoogle provides updates on a best efforts basis to apps that continue to use
173*55e87721SMatt GilbrideJava 7, though apps might need to upgrade to current versions of the library
174*55e87721SMatt Gilbridethat supports their JVM.
175*55e87721SMatt Gilbride
176*55e87721SMatt Gilbride#### Where to find specific information
177*55e87721SMatt Gilbride
178*55e87721SMatt GilbrideThe latest versions and the supported Java versions are identified on
179*55e87721SMatt Gilbridethe individual GitHub repository `github.com/GoogleAPIs/java-SERVICENAME`
180*55e87721SMatt Gilbrideand on [google-cloud-java][g-c-j].
181*55e87721SMatt Gilbride
182*55e87721SMatt Gilbride## Versioning
183*55e87721SMatt Gilbride
184*55e87721SMatt Gilbride
185*55e87721SMatt GilbrideThis library follows [Semantic Versioning](http://semver.org/).
186*55e87721SMatt Gilbride
187*55e87721SMatt Gilbride
188*55e87721SMatt Gilbride
189*55e87721SMatt Gilbride## Contributing
190*55e87721SMatt Gilbride
191*55e87721SMatt Gilbride
192*55e87721SMatt GilbrideContributions to this library are always welcome and highly encouraged.
193*55e87721SMatt Gilbride
194*55e87721SMatt GilbrideSee [CONTRIBUTING][contributing] for more information how to get started.
195*55e87721SMatt Gilbride
196*55e87721SMatt GilbridePlease note that this project is released with a Contributor Code of Conduct. By participating in
197*55e87721SMatt Gilbridethis project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more
198*55e87721SMatt Gilbrideinformation.
199*55e87721SMatt Gilbride
200*55e87721SMatt Gilbride
201*55e87721SMatt Gilbride## License
202*55e87721SMatt Gilbride
203*55e87721SMatt GilbrideApache 2.0 - See [LICENSE][license] for more information.
204*55e87721SMatt Gilbride
205*55e87721SMatt Gilbride## CI Status
206*55e87721SMatt Gilbride
207*55e87721SMatt GilbrideJava Version | Status
208*55e87721SMatt Gilbride------------ | ------
209*55e87721SMatt GilbrideJava 8 | [![Kokoro CI][kokoro-badge-image-2]][kokoro-badge-link-2]
210*55e87721SMatt GilbrideJava 8 OSX | [![Kokoro CI][kokoro-badge-image-3]][kokoro-badge-link-3]
211*55e87721SMatt GilbrideJava 8 Windows | [![Kokoro CI][kokoro-badge-image-4]][kokoro-badge-link-4]
212*55e87721SMatt GilbrideJava 11 | [![Kokoro CI][kokoro-badge-image-5]][kokoro-badge-link-5]
213*55e87721SMatt Gilbride
214*55e87721SMatt GilbrideJava is a registered trademark of Oracle and/or its affiliates.
215*55e87721SMatt Gilbride
216*55e87721SMatt Gilbride[product-docs]: https://cloud.google.com/natural-language/docs/
217*55e87721SMatt Gilbride[javadocs]: https://cloud.google.com/java/docs/reference/google-cloud-language/latest/overview
218*55e87721SMatt Gilbride[kokoro-badge-image-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java7.svg
219*55e87721SMatt Gilbride[kokoro-badge-link-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java7.html
220*55e87721SMatt Gilbride[kokoro-badge-image-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8.svg
221*55e87721SMatt Gilbride[kokoro-badge-link-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8.html
222*55e87721SMatt Gilbride[kokoro-badge-image-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-osx.svg
223*55e87721SMatt Gilbride[kokoro-badge-link-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-osx.html
224*55e87721SMatt Gilbride[kokoro-badge-image-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-win.svg
225*55e87721SMatt Gilbride[kokoro-badge-link-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-win.html
226*55e87721SMatt Gilbride[kokoro-badge-image-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java11.svg
227*55e87721SMatt Gilbride[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java11.html
228*55e87721SMatt Gilbride[stability-image]: https://img.shields.io/badge/stability-stable-green
229*55e87721SMatt Gilbride[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-language.svg
230*55e87721SMatt Gilbride[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-language/2.15.0
231*55e87721SMatt Gilbride[authentication]: https://github.com/googleapis/google-cloud-java#authentication
232*55e87721SMatt Gilbride[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
233*55e87721SMatt Gilbride[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
234*55e87721SMatt Gilbride[iam-policy]: https://cloud.google.com/iam/docs/overview#cloud-iam-policy
235*55e87721SMatt Gilbride[developer-console]: https://console.developers.google.com/
236*55e87721SMatt Gilbride[create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects
237*55e87721SMatt Gilbride[cloud-cli]: https://cloud.google.com/cli
238*55e87721SMatt Gilbride[troubleshooting]: https://github.com/googleapis/google-cloud-java/blob/main/TROUBLESHOOTING.md
239*55e87721SMatt Gilbride[contributing]: https://github.com/googleapis/google-cloud-java/blob/main/CONTRIBUTING.md
240*55e87721SMatt Gilbride[code-of-conduct]: https://github.com/googleapis/google-cloud-java/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct
241*55e87721SMatt Gilbride[license]: https://github.com/googleapis/google-cloud-java/blob/main/LICENSE
242*55e87721SMatt Gilbride[enable-billing]: https://cloud.google.com/apis/docs/getting-started#enabling_billing
243*55e87721SMatt Gilbride[enable-api]: https://console.cloud.google.com/flows/enableapi?apiid=language.googleapis.com
244*55e87721SMatt Gilbride[libraries-bom]: https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM
245*55e87721SMatt Gilbride[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png
246*55e87721SMatt Gilbride
247*55e87721SMatt Gilbride[semver]: https://semver.org/
248*55e87721SMatt Gilbride[cloudlibs]: https://cloud.google.com/apis/docs/client-libraries-explained
249*55e87721SMatt Gilbride[apilibs]: https://cloud.google.com/apis/docs/client-libraries-explained#google_api_client_libraries
250*55e87721SMatt Gilbride[oracle]: https://www.oracle.com/java/technologies/java-se-support-roadmap.html
251*55e87721SMatt Gilbride[g-c-j]: http://github.com/googleapis/google-cloud-java
252