// Path: src/main/java/io/aif/language/common/IExtractor.java
// @FunctionalInterface
// public interface IExtractor<T1, T2> extends Function<T1, Optional<T2>> {
// 
//   public Optional<T2> extract(final T1 from);
// 
//   @Override
//   public default Optional<T2> apply(final T1 t1) {
//     return extract(t1);
//   }
// 
// }
// 
// Path: src/main/java/io/aif/language/common/settings/ISettings.java
// public interface ISettings {
// 
//   @Deprecated
//   public ISettings SETTINGS = Guice.createInjector(new SettingsModule()).getInstance(ISettings.class);
// 
//   public String getVersion();
// 
//   public int recommendedMinimumTokensInputCount();
// 
//   public boolean useIsAlphabeticMethod();
// 
//   public double thresholdPForSeparatorCharacterInSecondFilter();
// 
//   public int minimalValuableTokenSizeForSentenceSplit();
// 
//   public int minimumCharacterObservationsCountForMakingCharacterValuableDuringSentenceSplitting();
// 
//   public double thresholdPFirstFilterForSeparatorCharacter();
// 
//   public double splitterCharactersGrouperSearchStep();
// 
//   public double splitterCharactersGrouperInitSearchPValue();
// 
//   public double wordSetDictComparatorThreshold();
// 
//   public double recursiveSubstringComparatorWeight();
// 
//   public double simpleTokenComparatorWeight();
// 
//   public double characterDensityComparatorWeight();
// 
//   public String predefinedSeparators();
// }
// 
// Path: src/main/java/io/aif/language/common/settings/SettingsModule.java
// public class SettingsModule extends AbstractModule {
// 
//   @Override
//   protected void configure() {
//     bind(ISettings.class).toProvider(new PropertyBasedSettings.Provider());
//   }
// 
// }


import com.google.inject.Guice;
import java.util.List;
import io.aif.language.common.IExtractor;
import io.aif.language.common.settings.ISettings;
import io.aif.language.common.settings.SettingsModule;
package io.aif.language.sentence.separators.extractors;




public interface ISeparatorExtractor extends IExtractor<List<String>, List<Character>> {

  public static enum Type {
    PREDEFINED(new PredefinedSeparatorExtractor()),
    PROBABILITY(new StatSeparatorExtractor()),
    NON_ALPHABETIC_CHARACTERS_EXTRACTOR(new NonAlphabeticCharactersExtractor());

    private final ISeparatorExtractor instance;

    private Type(final ISeparatorExtractor instance) {
      this.instance = instance;
    }

    public static ISeparatorExtractor getDefault() {
// Path: src/main/java/io/aif/language/common/IExtractor.java
// @FunctionalInterface
// public interface IExtractor<T1, T2> extends Function<T1, Optional<T2>> {
// 
//   public Optional<T2> extract(final T1 from);
// 
//   @Override
//   public default Optional<T2> apply(final T1 t1) {
//     return extract(t1);
//   }
// 
// }
// 
// Path: src/main/java/io/aif/language/common/settings/ISettings.java
// public interface ISettings {
// 
//   @Deprecated
//   public ISettings SETTINGS = Guice.createInjector(new SettingsModule()).getInstance(ISettings.class);
// 
//   public String getVersion();
// 
//   public int recommendedMinimumTokensInputCount();
// 
//   public boolean useIsAlphabeticMethod();
// 
//   public double thresholdPForSeparatorCharacterInSecondFilter();
// 
//   public int minimalValuableTokenSizeForSentenceSplit();
// 
//   public int minimumCharacterObservationsCountForMakingCharacterValuableDuringSentenceSplitting();
// 
//   public double thresholdPFirstFilterForSeparatorCharacter();
// 
//   public double splitterCharactersGrouperSearchStep();
// 
//   public double splitterCharactersGrouperInitSearchPValue();
// 
//   public double wordSetDictComparatorThreshold();
// 
//   public double recursiveSubstringComparatorWeight();
// 
//   public double simpleTokenComparatorWeight();
// 
//   public double characterDensityComparatorWeight();
// 
//   public String predefinedSeparators();
// }
// 
// Path: src/main/java/io/aif/language/common/settings/SettingsModule.java
// public class SettingsModule extends AbstractModule {
// 
//   @Override
//   protected void configure() {
//     bind(ISettings.class).toProvider(new PropertyBasedSettings.Provider());
//   }
// 
// }


// Path: src/main/java/io/aif/language/sentence/separators/extractors/ISeparatorExtractor.java
import com.google.inject.Guice;
import java.util.List;
import io.aif.language.common.IExtractor;
import io.aif.language.common.settings.ISettings;
import io.aif.language.common.settings.SettingsModule;

package io.aif.language.sentence.separators.extractors;




public interface ISeparatorExtractor extends IExtractor<List<String>, List<Character>> {

  public static enum Type {
    PREDEFINED(new PredefinedSeparatorExtractor()),
    PROBABILITY(new StatSeparatorExtractor()),
    NON_ALPHABETIC_CHARACTERS_EXTRACTOR(new NonAlphabeticCharactersExtractor());

    private final ISeparatorExtractor instance;

    private Type(final ISeparatorExtractor instance) {
      this.instance = instance;
    }

    public static ISeparatorExtractor getDefault() {
      final ISettings settings = Guice.createInjector(new SettingsModule()).getInstance(ISettings.class);