!7 lib 1400180 // github.com/optimaize/language-detector lib 1400181 // jsonic lib 1011966 // slf4j-api-1.7.25.jar lib 1400182 // guava static LS _stickyLibs_langDetect = ll(#1400180, #1400181, #1011966, #1400182); import com.optimaize.langdetect.*; import com.optimaize.langdetect.i18n.*; import com.optimaize.langdetect.ngram.*; import com.optimaize.langdetect.profiles.*; import com.optimaize.langdetect.text.*; cmodule LanguageDetectorModule { transient LanguageDetector languageDetector; void init() { lock lock; if (languageDetector != null) ret; final new LanguageProfileReader profileReader; L languageProfiles = map(ll("de", "en"), func(S lang) -> LanguageProfile { profileReader.readBuiltIn(LdLocale.fromString(lang)) }); languageDetector = LanguageDetectorBuilder.create(NgramExtractors.standard()) .withProfiles(languageProfiles) .build(); } // API // returns "en" or "de" or null S detectLanguage(S text) { S lang = dm_findAndCallModule("#1021121/WordToLanguageCRUD", 'languageForText, text); if (lang != null) ret languageToTwoLetters(lang); init(); L languages = languageDetector.getProbabilities(text); ret empty(languages) ? null : first(languages).getLocale().getLanguage(); } }