资源简介

使用java调用HanLP分词器实现两个文本相似度对比,可以很快对比出百分率(1=100%)

资源截图

代码片段和文件信息

package com.etoak.simHash;

import com.hankcs.hanlp.seg.common.Term;
import com.hankcs.hanlp.tokenizer.StandardTokenizer;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;

import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MySimHash {
    private String tokens; //字符串
    private BigInteger strSimHash;//字符产的hash值
    private int hashbits = 64; // 分词后的hash数;


    public MySimHash(String tokens) {
        this.tokens = tokens;
        this.strSimHash = this.simHash();
    }

    private MySimHash(String tokens int hashbits) {
        this.tokens = tokens;
        this.hashbits = hashbits;
        this.strSimHash = this.simHash();
    }


    /**
     * 清除html标签
     * @param content
     * @return
     */
    private String cleanResume(String content) {
        // 若输入为HTML下面会过滤掉所有的HTML的tag
        content = Jsoup.clean(content Whitelist.none());
        content = StringUtils.lowerCase(content);
        String[] strings = {“ “ “\n“ “\r“ “\t“ “\\r“ “\\n“ “\\t“ “ “};
        for (String s : strings) {
            content = content.replaceAll(s ““);
        }
        return content;
    }


    /**
     * 这个是对整个字符串进行hash计算
     * @return
     */
    private BigInteger simHash() {

        tokens = cleanResume(tokens); // cleanResume 删除一些特殊字符

        int[] v = new int[this.hashbits];

        List termList = StandardTokenizer.segment(this.tokens); // 对字符串进行分词

        //对分词的一些特殊处理 : 比如: 根据词性添加权重  过滤掉标点符号  过滤超频词汇等;
        Map weightOfNature = new HashMap(); // 词性的权重
        weightOfNature.put(“n“ 2); //给名词的权重是2;
        Map stopNatures = new HashMap();//停用的词性 如一些标点符号之类的;
        stopNatures.put(“w“ ““); //
        int overCount = 5; //设定超频词汇的界限 ;
        Map wordCount = new HashMap();

        for (Term term : termList) {
            String word = term.word; //分词字符串

            String nature = term.nature.toString(); // 分词属性;
            //  过滤超频词
            if (wordCount.containsKey(word)) {
                int count = wordCount.get(word);
                if (count > overCount) {
                    continue;
                }
                wordCount.put(word count + 1);
            } else {
                wordCount.put(word 1);
            }

            // 过滤停用词性
            if (stopNatures.containsKey(nature)) {
                continue;
            }

            // 2、将每一个分词hash为一组固定长度的数列.比如 64bit 的一个整数.
            BigInteger t = this.hash(word);
            for (int i = 0; i < this.hashbits; i++) {
                BigInteger bitmask = new BigInteger(“1“).shiftLeft(i);
                // 3、建立一个长度为64的整数数组(假设要生成64位的数字指纹也可以是其它数字)
                // 对每一个分词hash后的数列进行判断如果是1000...1那么数组的第一位和末尾一位加1
             

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-12-03 14:59  SimHash\
     目录           0  2017-12-03 14:58  SimHash\.idea\
     文件         626  2017-12-03 14:30  SimHash\.idea\compiler.xml
     文件         172  2017-12-03 14:30  SimHash\.idea\encodings.xml
     目录           0  2017-12-03 14:30  SimHash\.idea\inspectionProfiles\
     目录           0  2017-12-03 14:56  SimHash\.idea\libraries\
     文件         545  2017-12-03 14:30  SimHash\.idea\libraries\Maven__com_hankcs_hanlp_portable_1_3_4.xml
     文件         462  2017-12-03 14:30  SimHash\.idea\libraries\Maven__junit_junit_3_8_1.xml
     文件         556  2017-12-03 14:30  SimHash\.idea\libraries\Maven__org_apache_commons_commons_lang3_3_4.xml
     文件         485  2017-12-03 14:30  SimHash\.idea\libraries\Maven__org_jsoup_jsoup_1_10_3.xml
     文件         439  2017-12-03 14:30  SimHash\.idea\misc.xml
     文件         254  2017-12-03 14:29  SimHash\.idea\modules.xml
     文件       22159  2017-12-03 14:58  SimHash\.idea\workspace.xml
     文件        1549  2017-12-03 14:56  SimHash\pom.xml
     文件        1209  2017-12-03 14:56  SimHash\SimHash.iml
     目录           0  2017-12-03 14:29  SimHash\src\
     目录           0  2017-12-03 14:29  SimHash\src\main\
     目录           0  2017-12-03 14:31  SimHash\src\main\java\
     目录           0  2017-12-03 14:31  SimHash\src\main\java\com\
     目录           0  2017-12-03 14:57  SimHash\src\main\java\com\etoak\
     目录           0  2017-12-03 14:53  SimHash\src\main\java\com\etoak\simHash\
     文件       15305  2017-12-03 14:53  SimHash\src\main\java\com\etoak\simHash\MySimHash.java
     目录           0  2017-12-03 14:29  SimHash\src\main\resources\
     目录           0  2017-12-03 14:29  SimHash\src\test\
     目录           0  2017-12-03 14:29  SimHash\src\test\java\

评论

共有 条评论