use of org.talend.dataquality.semantic.recognizer.CategoryFrequency in project data-prep by Talend.
the class StatisticsAdapter method injectSemanticTypes.
private void injectSemanticTypes(final ColumnMetadata column, final Analyzers.Result result) {
if (result.exist(SemanticType.class) && !column.isDomainForced()) {
final SemanticType semanticType = result.get(SemanticType.class);
final List<CategoryFrequency> suggestedTypes = semanticType.getSuggestedCategories();
// TDP-471: Don't pick semantic type if lower than a threshold.
final Optional<CategoryFrequency> bestMatch = //
suggestedTypes.stream().filter(//
e -> !e.getCategoryName().isEmpty()).findFirst();
if (bestMatch.isPresent()) {
// TODO (TDP-734) Take into account limit of the semantic analyzer.
final float score = bestMatch.get().getScore();
if (score > semanticThreshold) {
updateMetadataWithCategoryInfo(column, bestMatch.get());
} else {
// Ensure the domain is cleared if score is lower than threshold (earlier analysis - e.g.
// on the first 20 lines - may be over threshold, but full scan may decide otherwise.
resetDomain(column);
}
} else if (StringUtils.isNotEmpty(column.getDomain())) {
// Column *had* a domain but seems like new analysis removed it.
resetDomain(column);
}
// Keep all suggested semantic categories in the column metadata
List<SemanticDomain> semanticDomains = //
suggestedTypes.stream().map(//
this::toSemanticDomain).filter(//
semanticDomain -> semanticDomain != null && semanticDomain.getScore() >= 1).limit(//
10).collect(Collectors.toList());
column.setSemanticDomains(semanticDomains);
}
}
use of org.talend.dataquality.semantic.recognizer.CategoryFrequency in project data-prep by Talend.
the class TypeUtilsTest method testSemanticDomainType.
@Test
public void testSemanticDomainType() throws Exception {
final SemanticType semanticType = new SemanticType();
semanticType.increment(new CategoryFrequency(SemanticCategoryEnum.AIRPORT.getId(), SemanticCategoryEnum.AIRPORT.getId()), 1);
assertThat(TypeUtils.getDomainLabel(SemanticCategoryEnum.AIRPORT.getId()), is(SemanticCategoryEnum.AIRPORT.getDisplayName()));
}
use of org.talend.dataquality.semantic.recognizer.CategoryFrequency in project data-prep by Talend.
the class StatisticsUtilsTest method adaptColumn.
private void adaptColumn(final ColumnMetadata column, final DataTypeEnum type) {
Analyzers.Result result = new Analyzers.Result();
// Data type
DataTypeOccurences dataType = new DataTypeOccurences();
dataType.increment(type);
result.add(dataType);
// Semantic type
SemanticType semanticType = new SemanticType();
CategoryFrequency category1 = new CategoryFrequency("category 1", "category 1");
category1.setScore(99);
semanticType.increment(category1, 1);
result.add(semanticType);
// Suggested types
CategoryFrequency category2 = new CategoryFrequency("category 2", "category 2");
category2.setScore(81);
semanticType.increment(category2, 1);
CategoryFrequency category3 = new CategoryFrequency("category 3", "category 3");
category3.setScore(50);
semanticType.increment(category3, 1);
// Value quality
ValueQualityStatistics valueQualityStatistics = new ValueQualityStatistics();
valueQualityStatistics.setEmptyCount(10);
valueQualityStatistics.setInvalidCount(20);
valueQualityStatistics.setValidCount(30);
result.add(valueQualityStatistics);
// Cardinality
CardinalityStatistics cardinalityStatistics = new CardinalityStatistics();
cardinalityStatistics.incrementCount();
cardinalityStatistics.add("distinctValue");
result.add(cardinalityStatistics);
// Data frequency
DataTypeFrequencyStatistics dataFrequencyStatistics = new DataTypeFrequencyStatistics();
dataFrequencyStatistics.add("frequentValue1");
dataFrequencyStatistics.add("frequentValue1");
dataFrequencyStatistics.add("frequentValue2");
dataFrequencyStatistics.add("frequentValue2");
result.add(dataFrequencyStatistics);
// Pattern frequency
PatternFrequencyStatistics patternFrequencyStatistics = new PatternFrequencyStatistics();
patternFrequencyStatistics.add("999a999");
patternFrequencyStatistics.add("999a999");
patternFrequencyStatistics.add("999aaaa");
patternFrequencyStatistics.add("999aaaa");
result.add(patternFrequencyStatistics);
// Quantiles
QuantileStatistics quantileStatistics = new QuantileStatistics();
quantileStatistics.add(1d);
quantileStatistics.add(2d);
quantileStatistics.endAddValue();
result.add(quantileStatistics);
// Summary
SummaryStatistics summaryStatistics = new SummaryStatistics();
summaryStatistics.addData(1d);
summaryStatistics.addData(2d);
result.add(summaryStatistics);
// Histogram
StreamNumberHistogramStatistics histogramStatistics = new StreamNumberHistogramStatistics();
histogramStatistics.setNumberOfBins(2);
histogramStatistics.add(1);
histogramStatistics.add(2);
result.add(histogramStatistics);
// Text length
TextLengthStatistics textLengthStatistics = new TextLengthStatistics();
textLengthStatistics.setMaxTextLength(30);
textLengthStatistics.setMinTextLength(10);
textLengthStatistics.setSumTextLength(40);
textLengthStatistics.setCount(5);
result.add(textLengthStatistics);
StatisticsAdapter adapter = new StatisticsAdapter(40);
adapter.adapt(Collections.singletonList(integerColumn), Collections.singletonList(result));
adapter.adapt(Collections.singletonList(stringColumn), Collections.singletonList(result));
}
Aggregations