All Downloads are FREE. Search and download functionalities are using the official Maven repository.

artoria.action.similarity.support.XmTextSimilarityHandler Maven / Gradle / Ivy

The newest version!
package artoria.action.similarity.support;

import artoria.action.handler.AbstractClassicActionHandler;
import artoria.action.similarity.TextSimilarity;
import artoria.util.CollectionUtils;
import artoria.util.StringUtils;
import org.xm.similarity.text.CosineSimilarity;
import org.xm.tokenizer.Word;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static artoria.util.ObjectUtils.cast;

/**
 * TextSimilarityHandler.
 * @see Similarity
 */
public class XmTextSimilarityHandler extends AbstractClassicActionHandler {
    private static CosineSimilarity cosineSimilarity = new CosineSimilarity();

    @Override
    public  T execute(Object input, Class clazz) {
        isSupport(new Class[]{Double.class}, clazz);
        TextSimilarity textSimilarity = (TextSimilarity) input;
        List words1 = textSimilarity.getWords1();
        List words2 = textSimilarity.getWords2();
        String algorithm = textSimilarity.getAlgorithm();
        String text1 = textSimilarity.getText1();
        String text2 = textSimilarity.getText2();

        if (CollectionUtils.isNotEmpty(words1) &&
                CollectionUtils.isNotEmpty(words2)) {
            return cast(cosineSimilarity.getSimilarity(convert(words1), convert(words2)));
        }
        else if (StringUtils.isNotBlank(text1) &&
                StringUtils.isNotBlank(text2)) {
            return cast(cosineSimilarity.getSimilarity(text1, text2));
        }
        else {
            throw new UnsupportedOperationException();
        }
    }

    protected List convert(List words) {
        if (CollectionUtils.isEmpty(words)) { return Collections.emptyList(); }
        List list = new ArrayList();
        for (String word : words) {
            list.add(new Word(word));
        }
        return list;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy