Skip to content

Commit 3a7f2c4

Browse files
authored
Merge branch 'master' into RLPNC-7496-master-specify-record-parameters
2 parents a760669 + bb3410b commit 3a7f2c4

18 files changed

Lines changed: 271 additions & 81 deletions

File tree

README.md

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
<a href="https://www.babelstreet.com/rosette"><img src="https://s3.amazonaws.com/styleguide.basistech.com/logos/rosette-logo.png" width="181" height="47" /></a>
1+
<a href="https://www.babelstreet.com/rosette"><img src="https://charts.babelstreet.com/icon.png" width="47" height="60"/></a>
2+
# Rosette by Babel Street
23

34
---
45

56
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.basistech.rosette/rosette-api/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.basistech.rosette/rosette-api-java-binding)
67

7-
## Rosette API
8-
The Rosette Text Analytics Platform uses natural language processing, statistical modeling, and machine learning to
9-
analyze unstructured and semi-structured text across 364 language-encoding-script combinations, revealing valuable
10-
information and actionable data. Rosette provides endpoints for extracting entities and relationships, translating and
11-
comparing the similarity of names, categorizing and adding linguistic tags to text and more.
8+
Rosette uses natural language processing, statistical modeling, and machine learning to analyze unstructured and semi-structured text across hundreds of language-script combinations, revealing valuable information and actionable data. Rosette provides endpoints for extracting entities and relationships, translating and comparing the similarity of names, categorizing and adding linguistic tags to text and more. Rosette Server is the on-premises installation of Rosette, with access to Rosette's functions as RESTful web service endpoints. This solves cloud security worries and allows customization (models/indexes) as needed for your business.
9+
1210

1311
## Rosette API Access
1412
- Rosette Cloud [Sign Up](https://developer.rosette.com/signup)
@@ -36,11 +34,10 @@ View small example programs for each Rosette endpoint in the
3634

3735
#### Documentation & Support
3836
- [Binding API](https://rosette-api.github.io/java/)
39-
- [Rosette Platform API](https://developer.rosette.com/features-and-functions)
37+
- [Rosette Platform API](https://docs.babelstreet.com/API/en/index-en.html)
4038
- [Binding Release Notes](https://github.com/rosette-api/java/wiki/Release-Notes)
41-
- [Rosette Platform Release Notes](https://support.rosette.com/hc/en-us/articles/360018354971-Release-Notes)
42-
- [Binding/Rosette Platform Compatibility](https://developer.rosette.com/features-and-functions?java#)
43-
- [Support](https://support.rosette.com)
39+
- [Rosette Platform Release Notes](https://babelstreet.my.site.com/support/s/article/Rosette-Cloud-Release-Notes)
40+
- [Support](https://babelstreet.my.site.com/support/s/)
4441
- [Binding License: Apache 2.0](LICENSE.txt)
4542

4643
## Binding Developer Information

annotations/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<parent>
2020
<groupId>com.basistech.rosette</groupId>
2121
<artifactId>rosette-api-java-binding</artifactId>
22-
<version>1.29.101-SNAPSHOT</version>
22+
<version>1.29.1-SNAPSHOT</version>
2323
</parent>
2424
<artifactId>rosette-api-annotations</artifactId>
2525
<name>rosette-api-annotations</name>

api/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<parent>
2020
<groupId>com.basistech.rosette</groupId>
2121
<artifactId>rosette-api-java-binding</artifactId>
22-
<version>1.29.101-SNAPSHOT</version>
22+
<version>1.29.1-SNAPSHOT</version>
2323
</parent>
2424
<artifactId>rosette-api</artifactId>
2525
<name>rosette-api</name>

common/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<parent>
2020
<groupId>com.basistech.rosette</groupId>
2121
<artifactId>rosette-api-java-binding</artifactId>
22-
<version>1.29.101-SNAPSHOT</version>
22+
<version>1.29.1-SNAPSHOT</version>
2323
</parent>
2424
<artifactId>rosette-api-common</artifactId>
2525
<name>rosette-api-common</name>

examples/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<parent>
2121
<groupId>com.basistech.rosette</groupId>
2222
<artifactId>rosette-api-java-binding</artifactId>
23-
<version>1.29.101-SNAPSHOT</version>
23+
<version>1.29.1-SNAPSHOT</version>
2424
</parent>
2525
<groupId>com.basistech.rosette</groupId>
2626
<artifactId>rosette-api-examples</artifactId>

json/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<parent>
2121
<groupId>com.basistech.rosette</groupId>
2222
<artifactId>rosette-api-java-binding</artifactId>
23-
<version>1.29.101-SNAPSHOT</version>
23+
<version>1.29.1-SNAPSHOT</version>
2424
</parent>
2525
<artifactId>rosette-api-json</artifactId>
2626
<name>rosette-api-json</name>

json/src/main/java/com/basistech/rosette/apimodel/jackson/ApiModelMixinModule.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.AddressFieldDeserializer;
2828
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.DateFieldDeserializer;
2929
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.NameFieldDeserializer;
30-
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResult;
31-
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.RecordSimilarityResultDeserializer;
30+
import com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers.RecordSimilarityResponseDeserializer;
31+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResponse;
3232
import com.basistech.rosette.apimodel.recordsimilarity.records.AddressField;
3333
import com.basistech.rosette.apimodel.recordsimilarity.records.DateField;
3434
import com.basistech.rosette.apimodel.recordsimilarity.records.NameField;
@@ -98,7 +98,7 @@ public void setupModule(Module.SetupContext context) {
9898
deserializers.addDeserializer(DateField.class, new DateFieldDeserializer());
9999
deserializers.addDeserializer(AddressField.class, new AddressFieldDeserializer());
100100
deserializers.addDeserializer(RecordSimilarityRequest.class, new RecordSimilarityRequestDeserializer());
101-
deserializers.addDeserializer(RecordSimilarityResult.class, new RecordSimilarityResultDeserializer());
101+
deserializers.addDeserializer(RecordSimilarityResponse.class, new RecordSimilarityResponseDeserializer());
102102
context.addDeserializers(deserializers);
103103
}
104104

json/src/main/java/com/basistech/rosette/apimodel/jackson/recordsimilaritydeserializers/RecordSimilarityDeserializerUtilities.java

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,15 @@
2020
import java.util.HashMap;
2121
import java.util.Iterator;
2222
import java.util.Map;
23+
import java.util.Optional;
2324

25+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityExplainInfo;
26+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResult;
2427
import com.fasterxml.jackson.core.JsonParser;
2528
import com.fasterxml.jackson.databind.JsonNode;
29+
2630
import javax.validation.Valid;
31+
import javax.validation.constraints.NotNull;
2732

2833
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityFieldInfo;
2934
import com.basistech.rosette.apimodel.recordsimilarity.records.AddressField;
@@ -33,9 +38,41 @@
3338

3439
final class RecordSimilarityDeserializerUtilities {
3540

36-
private RecordSimilarityDeserializerUtilities() { }
41+
private RecordSimilarityDeserializerUtilities() {
42+
}
43+
44+
public static RecordSimilarityResult parseResult(
45+
JsonNode node,
46+
JsonParser jsonParser,
47+
@Valid Map<String, RecordSimilarityFieldInfo> fields
48+
) throws IOException {
49+
final Double score = node.get("score") != null
50+
? node.get("score").traverse(jsonParser.getCodec()).readValueAs(Double.class)
51+
: null;
52+
final RecordSimilarityExplainInfo explainInfo = node.get("explainInfo") != null
53+
? node.get("explainInfo").traverse(jsonParser.getCodec()).readValueAs(RecordSimilarityExplainInfo.class)
54+
: null;
55+
final Map<String, RecordSimilarityField> left = node.get("left") != null && fields != null
56+
? parseRecord(node.get("left"), jsonParser, fields)
57+
: null;
58+
final Map<String, RecordSimilarityField> right = node.get("right") != null && fields != null
59+
? parseRecord(node.get("right"), jsonParser, fields)
60+
: null;
61+
final String error = Optional.ofNullable(node.get("error")).map(JsonNode::asText).orElse(null);
62+
return RecordSimilarityResult.builder()
63+
.score(score)
64+
.left(left)
65+
.right(right)
66+
.explainInfo(explainInfo)
67+
.error(error)
68+
.build();
69+
}
3770

38-
static Map<String, RecordSimilarityField> parseRecord(JsonNode jsonNode, @Valid Map<String, RecordSimilarityFieldInfo> fields, JsonParser jsonParser) throws IOException {
71+
static Map<String, RecordSimilarityField> parseRecord(
72+
JsonNode jsonNode,
73+
JsonParser jsonParser,
74+
@NotNull @Valid Map<String, RecordSimilarityFieldInfo> fields
75+
) throws IOException {
3976
final Iterator<Map.Entry<String, JsonNode>> recordsIterator = jsonNode.fields();
4077
final Map<String, RecordSimilarityField> recordMap = new HashMap<>();
4178
while (recordsIterator.hasNext()) {

json/src/main/java/com/basistech/rosette/apimodel/jackson/recordsimilaritydeserializers/RecordSimilarityRequestDeserializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private static List<Map<String, RecordSimilarityField>> parseRecords(final JsonN
6767
final JsonParser jsonParser) throws IOException {
6868
final List<Map<String, RecordSimilarityField>> records = new ArrayList<>();
6969
for (JsonNode recordNode : arrayNode) {
70-
records.add(RecordSimilarityDeserializerUtilities.parseRecord(recordNode, fields, jsonParser));
70+
records.add(RecordSimilarityDeserializerUtilities.parseRecord(recordNode, jsonParser, fields));
7171
}
7272
return records;
7373
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* Copyright 2024 Basis Technology Corp.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.basistech.rosette.apimodel.jackson.recordsimilaritydeserializers;
18+
19+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityFieldInfo;
20+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResponse;
21+
import com.basistech.rosette.apimodel.recordsimilarity.RecordSimilarityResult;
22+
import com.fasterxml.jackson.core.JsonParser;
23+
import com.fasterxml.jackson.core.type.TypeReference;
24+
import com.fasterxml.jackson.databind.DeserializationContext;
25+
import com.fasterxml.jackson.databind.JsonNode;
26+
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
27+
28+
import java.io.IOException;
29+
import java.util.ArrayList;
30+
import java.util.List;
31+
import java.util.Map;
32+
import java.util.Optional;
33+
34+
public class RecordSimilarityResponseDeserializer extends StdDeserializer<RecordSimilarityResponse> {
35+
36+
private static final TypeReference<Map<String, RecordSimilarityFieldInfo>> FIELDS_TYPE_REFERENCE = new TypeReference<>() {
37+
};
38+
39+
public RecordSimilarityResponseDeserializer() {
40+
super(RecordSimilarityResponse.class);
41+
}
42+
43+
@Override
44+
public RecordSimilarityResponse deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
45+
final JsonNode node = jsonParser.getCodec().readTree(jsonParser);
46+
47+
JsonNode fieldsNode = node.get("fields");
48+
49+
Map<String, RecordSimilarityFieldInfo> fields = fieldsNode != null ? node.get("fields").traverse(jsonParser.getCodec()).readValueAs(FIELDS_TYPE_REFERENCE) : null;
50+
String errorMessage = Optional.ofNullable(node.get("errorMessage")).map(JsonNode::asText).orElse(null);
51+
52+
JsonNode resultsNode = node.get("results");
53+
List<RecordSimilarityResult> results = new ArrayList<>();
54+
if (resultsNode != null) {
55+
for (JsonNode resultNode : resultsNode) {
56+
results.add(RecordSimilarityDeserializerUtilities.parseResult(resultNode, jsonParser, fields));
57+
}
58+
}
59+
60+
return RecordSimilarityResponse.builder()
61+
.fields(fields)
62+
.results(results)
63+
.errorMessage(errorMessage)
64+
.build();
65+
}
66+
}

0 commit comments

Comments
 (0)