@Signature public Integer fuzzyScore(Environment env, Memory query, @Nullable Locale locale) { FuzzyScore cosineDistance = new FuzzyScore(locale != null ? locale : env.getLocale()); return cosineDistance.fuzzyScore(text, query.toString()); } }
@Override public void eval() { String input1 = org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(rawInput1.start, rawInput1.end, rawInput1.buffer); String input2 = org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(rawInput2.start, rawInput2.end, rawInput2.buffer); out.value = d.fuzzyScore(input1, input2); } }
@Test public void testGetLocale() { final Locale locale = Locale.CANADA_FRENCH; final FuzzyScore fuzzyScore = new FuzzyScore(locale); final Locale localeTwo = fuzzyScore.getLocale(); assertThat(localeTwo).isSameAs(locale); }
@Override public void setup() { d = new org.apache.commons.text.similarity.FuzzyScore(java.util.Locale.ENGLISH); }
@Test public void testGetFuzzyScore() { assertThat(ENGLISH_SCORE.fuzzyScore("", "")).isEqualTo(0); assertThat(ENGLISH_SCORE.fuzzyScore("Workshop", "b")).isEqualTo(0); assertThat(ENGLISH_SCORE.fuzzyScore("Room", "o")).isEqualTo(1); assertThat(ENGLISH_SCORE.fuzzyScore("Workshop", "w")).isEqualTo(1); assertThat(ENGLISH_SCORE.fuzzyScore("Workshop", "ws")).isEqualTo(2); assertThat(ENGLISH_SCORE.fuzzyScore("Workshop", "wo")).isEqualTo(4); assertThat(ENGLISH_SCORE.fuzzyScore("Apache Software Foundation", "asf")).isEqualTo(3); }
@Test public void testMissingLocale() { assertThatIllegalArgumentException().isThrownBy(() -> { new FuzzyScore((Locale) null); }); }
@Override public Object apply(List<Object> list) { if (list.size() < 3) { throw new IllegalStateException("FUZZY_SCORE expects three args: [string, string, string]"); } Object oterm = list.get(0); Object oquery = list.get(1); Object olang = list.get(2); // return 0 here, validate will pass 3 nulls // if we change validate to pass default of expected type, we can differentiate if (!(oterm instanceof String) || !(oquery instanceof String) || !(olang instanceof String)) { return 0; } String term = (String) oterm; String query = (String) oquery; String lang = (String) olang; if (!tagsList.contains(lang)) { throw new ParseException( "FUZZY_SCORE requires a valid IETF BCP47 language code see FUZZY_LANGS and https://tools.ietf.org/html/bcp47"); } if (StringUtils.isEmpty(term) || StringUtils.isEmpty(query)) { return 0; } Locale locale = Locale.forLanguageTag(lang); FuzzyScore score = new FuzzyScore(locale); return score.fuzzyScore(term, query); } }
@Test public void testGetFuzzyScore_StringNullLocale() { assertThatIllegalArgumentException().isThrownBy(() -> { ENGLISH_SCORE.fuzzyScore("not null", null); }); }
@Override public double calculate(CharSequence s, CharSequence t) { FuzzyScore distance = new FuzzyScore(locale); return distance.fuzzyScore(s, t); }
@Test public void testGetFuzzyScore_NullStringLocale() { assertThatIllegalArgumentException().isThrownBy(() -> { ENGLISH_SCORE.fuzzyScore(null, "not null"); }); }
@Test public void testGetFuzzyScore_NullNullLocale() { assertThatIllegalArgumentException().isThrownBy(() -> { ENGLISH_SCORE.fuzzyScore(null, null); }); }