com.optimaize.langdetect.i18n.LdLocale Java Examples

The following examples show how to use com.optimaize.langdetect.i18n.LdLocale. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: OptimaizeLanguageDetector.java    From ambiverse-nlu with Apache License 2.0 6 votes vote down vote up
public Language detectLanguage(String text) throws AidaUnsupportedLanguageException {
  TextObject textObject = textObjectFactory.forText(text);
  Optional<LdLocale> lang = languageDetector.detect(textObject);
  if (!lang.isPresent()) {
    throw new AidaUnsupportedLanguageException(
        "Language could not be detected. Please specify it as a parameter in ISO 639-1 two-letter format, e.g. 'cs', 'en', 'de', 'es', or 'zh'.");
  }
  String language = lang.get().getLanguage();
  Language result;
  try {
    result = Language.getLanguageForString(language);
  } catch (IllegalArgumentException e) {
    throw new AidaUnsupportedLanguageException("Language '" + language + "' has been detected but it is not supported. "
        + "If this is not the language of your document, please specify the correct language as a parameter in ISO 639-1 two-letter format, e.g. 'cs', 'en', 'de', 'es', or 'zh'.");
  }
  return result;
}
 
Example #2
Source File: LanguageDetectorImpl.java    From language-detector with Apache License 2.0 6 votes vote down vote up
/**
 * Use the {@link LanguageDetectorBuilder}.
 */
LanguageDetectorImpl(@NotNull NgramFrequencyData ngramFrequencyData,
                     double alpha, Optional<Long> seed, int shortTextAlgorithm,
                     double prefixFactor, double suffixFactor,
                     double probabilityThreshold,
                     double minimalConfidence,
                     @Nullable Map<LdLocale, Double> langWeightingMap,
                     @NotNull NgramExtractor ngramExtractor) {
    if (alpha<0d || alpha >1d) throw new IllegalArgumentException("alpha must be between 0 and 1, but was: "+alpha);
    if (prefixFactor <0d || prefixFactor >10d) throw new IllegalArgumentException("prefixFactor must be between 0 and 10, but was: "+prefixFactor);
    if (suffixFactor <0d || suffixFactor >10d) throw new IllegalArgumentException("suffixFactor must be between 0 and 10, but was: "+suffixFactor);
    if (probabilityThreshold<0d || probabilityThreshold>1d) throw new IllegalArgumentException("probabilityThreshold must be between 0 and 1, but was: "+probabilityThreshold);
    if (minimalConfidence<0d || minimalConfidence>1d) throw new IllegalArgumentException("minimalConfidence must be between 0 and 1, but was: "+minimalConfidence);
    if (langWeightingMap!=null && langWeightingMap.isEmpty()) langWeightingMap = null;

    this.ngramFrequencyData = ngramFrequencyData;
    this.alpha = alpha;
    this.seed = seed;
    this.shortTextAlgorithm = shortTextAlgorithm;
    this.prefixFactor = prefixFactor;
    this.suffixFactor = suffixFactor;
    this.probabilityThreshold = probabilityThreshold;
    this.minimalConfidence = minimalConfidence;
    this.priorMap = (langWeightingMap==null) ? null : Util.makeInternalPrioMap(langWeightingMap, ngramFrequencyData.getLanguageList());
    this.ngramExtractor = ngramExtractor;
}
 
Example #3
Source File: Util.java    From language-detector with Apache License 2.0 6 votes vote down vote up
/**
 */
public static double[] makeInternalPrioMap(@NotNull Map<LdLocale, Double> langWeightingMap,
                                            @NotNull List<LdLocale> langlist) {
    assert !langWeightingMap.isEmpty();
    double[] priorMap = new double[langlist.size()];
    double sump = 0;
    for (int i=0;i<priorMap.length;++i) {
        LdLocale lang = langlist.get(i);
        if (langWeightingMap.containsKey(lang)) {
            double p = langWeightingMap.get(lang);
            assert p>=0 : "Prior probability must be non-negative!";
            priorMap[i] = p;
            sump += p;
        }
    }
    assert sump > 0 : "Sum must be greater than zero!";
    for (int i=0;i<priorMap.length;++i) priorMap[i] /= sump;
    return priorMap;
}
 
Example #4
Source File: TechnicalLanguageDetectorImplTest.java    From language-detector with Apache License 2.0 6 votes vote down vote up
private LanguageDetector makeDetector() {
    //building exactly like the old detector behaved.
    LanguageDetectorBuilder detectorBuilder = LanguageDetectorBuilder.create(NgramExtractor.gramLengths(1))
            .affixFactor(1.0)
            .shortTextAlgorithm(0);

    LanguageProfileBuilder profileBuilder = new LanguageProfileBuilder(LdLocale.fromString("en"));
    add(detectorBuilder, profileBuilder, TRAINING_EN);

    profileBuilder = new LanguageProfileBuilder(LdLocale.fromString("fr"));
    add(detectorBuilder, profileBuilder, TRAINING_FR);

    profileBuilder = new LanguageProfileBuilder(LdLocale.fromString("ja"));
    add(detectorBuilder, profileBuilder, TRAINING_JA);

    return detectorBuilder.build();
}
 
Example #5
Source File: LanguageProfileValidatorTest.java    From language-detector with Apache License 2.0 6 votes vote down vote up
@Test
public void validationTest() throws IOException {
    TextObjectFactory textObjectFactory = CommonTextObjectFactories.forIndexingCleanText();

    TextObject inputText = textObjectFactory.create();
    //German text from: https://germantestdrive.wordpress.com/2009/07/09/langer-test-text/
    inputText.append("Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort „und“ und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort „und“ und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort „und“ und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort „und“ und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort „und“ und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort „und“ und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort „und“ und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort „und“ und das Blindtextchen solle umkehren und wieder in sein eigenes, sicheres Land zurückkehren. Doch alles Gutzureden konnte es nicht überzeugen und so dauerte es nicht lange, bis ihm ein paar heimtückische Werbetexter auflauerten, es mit Longe und Parole betrunken machten und es dann in ihre Agentur schleppten, wo sie es für ihre Projekte wieder und wieder mißbrauchten. Und wenn es nicht umgeschrieben wurde, dann benutzen Sie es immernoch. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie mit den nötigen Regelialien. Es ist ein paradiesmatisches Land, in dem einem gebratene Satzteile in den Mund fliegen. Nicht einmal von der allmächtigen Interpunktion werden die Blindtexte beherrscht – ein geradezu unorthographisches Leben. Eines Tages aber beschloß eine kleine Zeile Blindtext, ihr Name war Lorem Ipsum, hinaus zu gehen in die weite Grammatik. Der große Oxmox riet ihr davon ab, da es dort wimmele von bösen Kommata, wilden Fragezeichen und hinterhältigen Semikoli, doch das Blindtextchen ließ sich nicht beirren. Es packte seine sieben Versalien, schob sich sein Initial in den Gürtel und machte sich auf den Weg. Als es die ersten Hügel des Kursivgebirges erklommen hatte, warf es einen letzten Blick zurück auf die Skyline seiner Heimatstadt Buchstabhausen, die Headline von Alphabetdorf und die Subline seiner eigenen Straße, der Zeilengasse. Wehmütig lief ihm eine rethorische Frage über die Wange, dann setzte es seinen Weg fort. Unterwegs traf es eine Copy. Die Copy warnte das Blindtextchen, da, wo sie herkäme wäre sie zigmal umgeschrieben worden und alles, was von ihrem Ursprung noch übrig wäre, sei das Wort „und“.");

    LanguageProfileBuilder languageProfileBuilder = new LanguageProfileBuilder(LdLocale.fromString("de"))
            .ngramExtractor(NgramExtractors.standard())
            .minimalFrequency(5);

    double result = new LanguageProfileValidator()
            .loadAllBuiltInLanguageProfiles()
            .setK(5)
            .loadInputSample(inputText)
            .setLanguageProfileBuilder(languageProfileBuilder)
            .validate();

    assertEquals(0.9999971D, result, 0.0000001);
}
 
Example #6
Source File: OptimaizeLanguageDetector.java    From ambiverse-nlu with Apache License 2.0 6 votes vote down vote up
public Language detectLanguage(String text) throws AidaUnsupportedLanguageException {
  TextObject textObject = textObjectFactory.forText(text);
  Optional<LdLocale> lang = languageDetector.detect(textObject);
  if (!lang.isPresent()) {
    throw new AidaUnsupportedLanguageException(
        "Language could not be detected. Please specify it as a parameter in ISO 639-1 two-letter format, e.g. 'en', 'de', 'es', or 'zh'.");
  }
  String language = lang.get().getLanguage();
  Language result;
  try {
    result = Language.getLanguageForString(language);
  } catch (IllegalArgumentException e) {
    throw new AidaUnsupportedLanguageException("Language '" + language + "' has been detected but it is not supported. "
        + "If this is not the language of your document, please specify the correct language as a parameter in ISO 639-1 two-letter format, e.g. 'en', 'de', 'es', or 'zh'.");
  }
  return result;
}
 
Example #7
Source File: DetectedLanguageTest.java    From language-detector with Apache License 2.0 5 votes vote down vote up
@Test
public final void basic() {
    DetectedLanguage lang = new DetectedLanguage(LdLocale.fromString("en"), 1.0);
    assertEquals(lang.getLocale().getLanguage(), "en");
    assertEquals(lang.getProbability(), 1.0, 0.0001);
    assertEquals(lang.toString(), "DetectedLanguage[en:1.0]");
}
 
Example #8
Source File: LanguageProfileReaderTest.java    From language-detector with Apache License 2.0 5 votes vote down vote up
private void verify_readAllBuiltIn(List<LanguageProfile> profiles) {
    assertEquals(profiles.size(), 71); //adjust this number when adding more languages
    Set<LdLocale> allLangs = new HashSet<>();
    for (LanguageProfile profile : profiles) {
        assertFalse("Duplicate language: "+profile.getLocale(), allLangs.contains(profile.getLocale()));
        allLangs.add(profile.getLocale());
    }
    assertTrue(allLangs.contains(LdLocale.fromString("de")));
    assertTrue(allLangs.contains(LdLocale.fromString("zh-CN")));
    assertTrue(allLangs.contains(LdLocale.fromString("zh-TW")));
}
 
Example #9
Source File: DetectedLanguageTest.java    From language-detector with Apache License 2.0 5 votes vote down vote up
@Test
public final void comparable() {
    List<DetectedLanguage> list = new ArrayList<>();
    list.add(new DetectedLanguage(LdLocale.fromString("en"), 1.0));
    list.add(new DetectedLanguage(LdLocale.fromString("de"), 1.0));
    list.add(new DetectedLanguage(LdLocale.fromString("fr"), 0.9));
    Collections.sort(list);
    assertEquals(list.get(0).getLocale().getLanguage(), "de"); //alphabetical de before en
    assertEquals(list.get(1).getLocale().getLanguage(), "en");
    assertEquals(list.get(2).getLocale().getLanguage(), "fr"); //points 0.9 the last
}
 
Example #10
Source File: Util.java    From language-detector with Apache License 2.0 5 votes vote down vote up
public static String wordProbToString(double[] prob, List<LdLocale> langlist) {
    Formatter formatter = new Formatter();
    for(int j=0;j<prob.length;++j) {
        double p = prob[j];
        if (p>=0.00001) {
            formatter.format(" %s:%.5f", langlist.get(j), p);
        }
    }
    return formatter.toString();
}
 
Example #11
Source File: NgramFrequencyData.java    From language-detector with Apache License 2.0 5 votes vote down vote up
/**
 * @param gramLengths for example [1,2,3]
 * @throws java.lang.IllegalArgumentException if languageProfiles or gramLengths is empty, or if one of the
 *         languageProfiles does not have the grams of the required sizes.
 */
@NotNull
public static NgramFrequencyData create(@NotNull Collection<LanguageProfile> languageProfiles, @NotNull Collection<Integer> gramLengths) throws IllegalArgumentException {
    if (languageProfiles.isEmpty()) throw new IllegalArgumentException("No languageProfiles provided!");
    if (gramLengths.isEmpty()) throw new IllegalArgumentException("No gramLengths provided!");

    Map<String, double[]> wordLangProbMap = new HashMap<>();
    List<LdLocale> langlist = new ArrayList<>();
    int langsize = languageProfiles.size();

    int index = -1;
    for (LanguageProfile profile : languageProfiles) {
        index++;

        langlist.add( profile.getLocale() );

        for (Integer gramLength : gramLengths) {
            if (!profile.getGramLengths().contains(gramLength)) {
                throw new IllegalArgumentException("The language profile for "+profile.getLocale()+" does not contain "+gramLength+"-grams!");
            }
            for (Map.Entry<String, Integer> ngramEntry : profile.iterateGrams(gramLength)) {
                String ngram      = ngramEntry.getKey();
                Integer frequency = ngramEntry.getValue();
                if (!wordLangProbMap.containsKey(ngram)) {
                    wordLangProbMap.put(ngram, new double[langsize]);
                }
                double prob = frequency.doubleValue() / profile.getNumGramOccurrences(ngram.length());
                wordLangProbMap.get(ngram)[index] = prob;
            }
        }
    }

    return new NgramFrequencyData(wordLangProbMap, langlist);
}
 
Example #12
Source File: LanguageDetectorImpl.java    From language-detector with Apache License 2.0 5 votes vote down vote up
@Override
public Optional<LdLocale> detect(CharSequence text) {
    List<DetectedLanguage> probabilities = getProbabilities(text);
    if (probabilities.isEmpty()) {
        return Optional.absent();
    } else {
        DetectedLanguage best = probabilities.get(0);
        if (best.getProbability() >= minimalConfidence) {
            return Optional.of(best.getLocale());
        } else {
            return Optional.absent();
        }
    }
}
 
Example #13
Source File: NgramFrequencyDataTest.java    From language-detector with Apache License 2.0 5 votes vote down vote up
@Test
public void constantOrder() throws Exception {
    //expect constant order:
    int pos=0;
    for (LdLocale locale : allThreeGrams.getLanguageList()) {
        assertEquals(allThreeGrams.getLanguage(pos), locale);
        pos++;
    }
}
 
Example #14
Source File: LanguageProfileReader.java    From language-detector with Apache License 2.0 5 votes vote down vote up
private boolean looksLikeLanguageProfileName(String fileName) {
    if (fileName.contains(".")) {
        return false;
    }
    try {
        LdLocale.fromString(fileName);
        return true;
    } catch (Exception e) {
        return false;
    }
}
 
Example #15
Source File: LanguageProfileReader.java    From language-detector with Apache License 2.0 5 votes vote down vote up
/**
 * Reads all built-in language profiles from the "languages" folder (shipped with the jar).
 */
public List<LanguageProfile> readAllBuiltIn() throws IOException {
    List<LanguageProfile> loaded = new ArrayList<>();
    for (LdLocale locale : BuiltInLanguages.getLanguages()) {
        loaded.add(readBuiltIn(locale));
    }
    return loaded;
}
 
Example #16
Source File: LanguageProfileReader.java    From language-detector with Apache License 2.0 5 votes vote down vote up
@NotNull
public List<LanguageProfile> readBuiltIn(@NotNull Collection<LdLocale> languages) throws IOException {
    List<String> profileNames = new ArrayList<>();
    for (LdLocale locale : languages) {
        profileNames.add(makeProfileFileName(locale));
    }
    return read(LanguageProfileReader.class.getClassLoader(), PROFILES_DIR, profileNames);
}
 
Example #17
Source File: LanguageProfileReader.java    From language-detector with Apache License 2.0 5 votes vote down vote up
@NotNull
public LanguageProfile readBuiltIn(@NotNull LdLocale locale) throws IOException {
    String filename = makeProfileFileName(locale);
    String path = makePathForClassLoader(PROFILES_DIR, filename);
    try (InputStream in = LanguageProfileReader.class.getClassLoader().getResourceAsStream(path)) {
        if (in == null) {
            throw new IOException("No language file available named "+filename+" at " + path + "!");
        }
        return read(in);
    }
}
 
Example #18
Source File: LanguageProfileImpl.java    From language-detector with Apache License 2.0 5 votes vote down vote up
/**
 * Use the builder.
 */
LanguageProfileImpl(@NotNull LdLocale locale,
                    @NotNull Map<Integer, Map<String, Integer>> ngrams) {
    this.locale = locale;
    this.ngrams = ImmutableMap.copyOf(ngrams);
    this.stats  = makeStats(ngrams);
}
 
Example #19
Source File: LanguageCheckerImpl.java    From translator with MIT License 5 votes vote down vote up
@Override
public String detect(String text) {
    //query:
    TextObject textObject = textObjectFactory.forText(text);
    Optional<LdLocale> lang = languageDetector.detect(textObject);

    if(lang.isPresent()){
        return lang.get().getLanguage();
    }

    return "en";
}
 
Example #20
Source File: OptimaizeDetector.java    From vespa with Apache License 2.0 5 votes vote down vote up
private static Language guessLanguageUsingOptimaize(String input) {
    Optional<LdLocale> result = languageDetector.detect(textObjectFactory.forText(input));
    if ( ! result.isPresent()) return Language.UNKNOWN;
    log.log(Level.FINE, () -> "guessing language "+result.get()+" from input: "+input);

    return Language.fromLocale(new Locale(result.get().getLanguage()));
}
 
Example #21
Source File: Translator.java    From KaellyBot with GNU General Public License v3.0 5 votes vote down vote up
/**
 * Détermine une langue à partir d'une source textuelle
 * @param source Source textuelle
 * @return Langue majoritaire détectée au sein de la source
 */
private static Language getLanguageFrom(String source){
    TextObject textObject = CommonTextObjectFactories.forDetectingOnLargeText().forText(source);
    LdLocale lang = getLanguageDetector().detect(textObject)
            .or(LdLocale.fromString(Constants.defaultLanguage.getAbrev().toLowerCase()));

    for(Language lg : Language.values())
        if(lang.getLanguage().equals(lg.getAbrev().toLowerCase()))
            return lg;
    return Constants.defaultLanguage;
}
 
Example #22
Source File: NonEnglishCheckerService.java    From Natty with GNU General Public License v3.0 5 votes vote down vote up
@Override
public String check(Post post) {

    String dataToCheck = stripTags(stripBody(post)).replaceAll("\\p{Punct}+", "");
    try {
        TextObject textObject = textObjectFactory.forText(dataToCheck);
        Optional<LdLocale> lang = optimaizeDetector.detect(textObject);
        if (!lang.isPresent()) {
            if(dataToCheck.length()>50) {
                writer.append(dataToCheck);
                LanguageResult result = writer.getLanguage();
                String tikaLang = result.getLanguage();
                writer.close();

                if (!tikaLang.toLowerCase().equals("")) {
                    return tikaLang;
                }
                else{
                    return null;
                }
            }
            else if(dataToCheck.length()<50){
                return null;
            }
            if(checkIfNoCodeBlock(post)){
                return "Gibberish";
            }
            return null;
        }
        return lang.get().getLanguage();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
 
Example #23
Source File: DocumentLanguage.java    From baleen with Apache License 2.0 5 votes vote down vote up
@Override
public void doProcess(JCas aJCas) throws AnalysisEngineProcessException {
  TextObject textObject = textObjectFactory.forText(aJCas.getDocumentText());
  Optional<LdLocale> lang = languageDetector.detect(textObject);

  if (lang.isPresent()) {
    aJCas.setDocumentLanguage(lang.get().getLanguage());
  }
}
 
Example #24
Source File: DetectedLanguage.java    From language-detector with Apache License 2.0 5 votes vote down vote up
/**
 * @param locale
 * @param probability 0-1
 */
public DetectedLanguage(@NotNull LdLocale locale, double probability) {
    if (probability<0d) throw new IllegalArgumentException("Probability must be >= 0 but was "+probability);
    if (probability>1d) throw new IllegalArgumentException("Probability must be <= 1 but was "+probability);
    this.locale = locale;
    this.probability = probability;
}
 
Example #25
Source File: OldLangProfileConverter.java    From language-detector with Apache License 2.0 5 votes vote down vote up
public static LanguageProfile convert(LangProfile langProfile) {
    LdLocale locale;
    try {
        locale = LdLocale.fromString(langProfile.getName());
    } catch (Exception e) {
        throw new RuntimeException("Profile file name logic was changed in v0.5, please update your custom profiles!", e);
    }
    LanguageProfileBuilder builder = new LanguageProfileBuilder(locale);
    for (Map.Entry<String, Integer> entry : langProfile.getFreq().entrySet()) {
        builder.addGram(entry.getKey(), entry.getValue());
    }
    return builder.build();
}
 
Example #26
Source File: LanguageProfile.java    From language-detector with Apache License 2.0 4 votes vote down vote up
@NotNull
LdLocale getLocale();
 
Example #27
Source File: DetectedLanguage.java    From language-detector with Apache License 2.0 4 votes vote down vote up
@NotNull
public LdLocale getLocale() {
    return locale;
}
 
Example #28
Source File: NgramFrequencyData.java    From language-detector with Apache License 2.0 4 votes vote down vote up
private NgramFrequencyData(@NotNull Map<String, double[]> wordLangProbMap,
                           @NotNull List<LdLocale> langlist) {
    //not making immutable copies because I create them here (optimization).
    this.wordLangProbMap = Collections.unmodifiableMap(wordLangProbMap);
    this.langlist = Collections.unmodifiableList(langlist);
}
 
Example #29
Source File: NgramFrequencyData.java    From language-detector with Apache License 2.0 4 votes vote down vote up
@NotNull
public List<LdLocale> getLanguageList() {
    return langlist;
}
 
Example #30
Source File: NgramFrequencyData.java    From language-detector with Apache License 2.0 4 votes vote down vote up
@NotNull
public LdLocale getLanguage(int pos) {
    return langlist.get(pos);
}