// 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/IMapper.java
// @FunctionalInterface
// public interface IMapper<T, S> extends Function<T, S> {
// 
//   public S map(final T nestedList);
// 
//   @Override
//   default S apply(final T t) {
//     return map(t);
//   }
// 
//   default List<S> mapAll(final List<T> elements) {
//     return elements
//         .parallelStream()
//         .map(this)
//         .collect(Collectors.toList());
//   }
// 
// }
// 
// Path: src/main/java/io/aif/language/word/IWord.java
// public interface IWord {
// 
//   public String getRootToken();
// 
//   public Set<String> getAllTokens();
// 
//   public Long getCount();
// 
//   public int getTokenCount(String token);
// 
//   public static interface IWordPlaceholder {
// 
//     public IWord getWord();
// 
//     public String getToken();
// 
//   }
// 
// }


import org.apache.log4j.Logger;
import java.util.Collection;
import java.util.Comparator;
import java.util.Optional;
import io.aif.language.common.IExtractor;
import io.aif.language.common.IMapper;
import io.aif.language.word.IWord;
package io.aif.language.word.dict;




public class WordMapper implements IMapper<WordMapper.DataForMapping, IWord> {

  private static final Logger logger = Logger.getLogger(WordMapper.class);

  private final IExtractor<Collection<String>, String> rootTokenExtractor;

  WordMapper(IExtractor<Collection<String>, String> rootTokenExtractor) {
    this.rootTokenExtractor = rootTokenExtractor;
  }

  @Override
// 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/IMapper.java
// @FunctionalInterface
// public interface IMapper<T, S> extends Function<T, S> {
// 
//   public S map(final T nestedList);
// 
//   @Override
//   default S apply(final T t) {
//     return map(t);
//   }
// 
//   default List<S> mapAll(final List<T> elements) {
//     return elements
//         .parallelStream()
//         .map(this)
//         .collect(Collectors.toList());
//   }
// 
// }
// 
// Path: src/main/java/io/aif/language/word/IWord.java
// public interface IWord {
// 
//   public String getRootToken();
// 
//   public Set<String> getAllTokens();
// 
//   public Long getCount();
// 
//   public int getTokenCount(String token);
// 
//   public static interface IWordPlaceholder {
// 
//     public IWord getWord();
// 
//     public String getToken();
// 
//   }
// 
// }


// Path: src/main/java/io/aif/language/word/dict/WordMapper.java
import org.apache.log4j.Logger;
import java.util.Collection;
import java.util.Comparator;
import java.util.Optional;
import io.aif.language.common.IExtractor;
import io.aif.language.common.IMapper;
import io.aif.language.word.IWord;

package io.aif.language.word.dict;




public class WordMapper implements IMapper<WordMapper.DataForMapping, IWord> {

  private static final Logger logger = Logger.getLogger(WordMapper.class);

  private final IExtractor<Collection<String>, String> rootTokenExtractor;

  WordMapper(IExtractor<Collection<String>, String> rootTokenExtractor) {
    this.rootTokenExtractor = rootTokenExtractor;
  }

  @Override
  public IWord map(final WordMapper.DataForMapping data) {