资源简介

中文文本相似度匹配算法 simHash 海明距离 IK分词 完整的可运行的示例代码 包含simHash 算法,使用IK 对中文文本进行分词处理

资源截图

代码片段和文件信息

package SimHash; /**
 * Created by danjunwei_sx on 2017/11/15.
 */

import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;

import java.io.IOException;
import java.io.StringReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * Function: simHash 判断文本相似度,该示例程支持中文

 * date: 2013-8-6 上午1:11:48 

 * @author june
 * @version 0.1
 */

public class SimHash
{
   /* private String tokens;

    private BigInteger intSimHash;

    private String strSimHash;

    private int hashbits = 64;*/
    public String tokens;

    public BigInteger intSimHash;

    public String strSimHash;

    public int hashbits = 64;

    public SimHash(String tokens) throws IOException {
        this.tokens = tokens;
        this.intSimHash = this.simHash();
    }

    public SimHash(String tokens int hashbits) throws IOException {
        this.tokens = tokens;
        this.hashbits = hashbits;
        this.intSimHash = this.simHash();
    }

    HashMap wordMap = new HashMap();

    public BigInteger simHash() throws IOException {
        // 定义特征向量/数组
        int[] v = new int[this.hashbits];
        // 英文分词
        // StringTokenizer stringTokens = new StringTokenizer(this.tokens);
        // while (stringTokens.hasMoreTokens()) {
        // String temp = stringTokens.nextToken();
        // }
        // 1、中文分词,分词器采用 IKAnalyzer3.2.8 ,仅供演示使用,新版 API 已变化。
        StringReader reader = new StringReader(this.tokens);
        // 当为true时,分词器进行最大词长切分
       // IKSegmentation ik = new IKSegmentation(reader true);
        IKSegmenter ik  = new IKSegmenter(readertrue);
        Lexeme lexeme = null;
        String word = null;
        StringBuffer temp = new StringBuffer();    //String temp = null
        while ((lexeme = ik.next()) != null) {
            word = lexeme.getLexemeText();
            temp.append(word+“ “);//temp = temp+“ “+word;
            // 注意停用词会被干掉
            // System.out.println(word);
            // 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
                // 中间的62位减一也就是说逢1加1逢0减1.一直到把所有的分词hash数列全部判断完毕.
                if (t.and(bitmask).signum() != 0) {
                    // 这里是计算整个文档的所有特征的向量和
                    // 这里实际使用中需要 +- 权重,比如词频,而不是简单的 +1/-1,
                    v[i] += 1;
                } else {
                    v[i] -= 1;
                }
            }
        }
        System.out.println(temp); //
        BigInteger fingerprint = new BigInteger(“0“);
        StringBuffer simHashBuffer = new StringBuffer();
        for (int i = 0; i

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         11  2017-11-15 12:00  simHash\mvn_project\.idea\.name

     文件       1151  2017-11-15 12:01  simHash\mvn_project\.idea\compiler.xml

     文件        941  2017-11-16 17:48  simHash\mvn_project\.idea\encodings.xml

     文件        224  2017-11-15 15:21  simHash\mvn_project\.idea\libraries\ikanalyzer_2012_u6.xml

     文件        337  2017-11-15 15:27  simHash\mvn_project\.idea\libraries\IKAnalyzer_all_jar.xml

     文件        462  2017-11-15 12:01  simHash\mvn_project\.idea\libraries\Maven__junit_junit_3_8_1.xml

     文件        584  2017-11-15 15:09  simHash\mvn_project\.idea\misc.xml

     文件        273  2017-11-15 12:00  simHash\mvn_project\.idea\modules.xml

     文件        143  2017-11-15 12:00  simHash\mvn_project\.idea\scopes\scope_settings.xml

     文件        173  2017-11-15 12:00  simHash\mvn_project\.idea\vcs.xml

     文件      34268  2017-11-17 09:52  simHash\mvn_project\.idea\workspace.xml

     文件    4939784  2017-11-15 15:26  simHash\mvn_project\jar\IKAnalyzer_all_jar.zip

     文件         23  2017-11-17 10:06  simHash\mvn_project\jar\jar包引入.txt

     文件       1021  2017-11-17 09:52  simHash\mvn_project\mvn_project.iml

     文件       1383  2017-11-17 09:52  simHash\mvn_project\pom.xml

     文件       7044  2017-11-15 17:45  simHash\mvn_project\src\main\java\SimHash\SimHash.java

     文件       5800  2017-11-17 09:50  simHash\mvn_project\src\main\java\Test\Test.java

     文件         57  2017-11-15 12:01  simHash\mvn_project\src\main\webapp\index.jsp

     文件        222  2017-11-15 12:01  simHash\mvn_project\src\main\webapp\WEB-INF\web.xml

     文件       5080  2017-11-17 09:52  simHash\mvn_project\target\classes\SimHash\SimHash.class

     文件       4612  2017-11-17 09:52  simHash\mvn_project\target\classes\Test\Test.class

     目录          0  2017-11-15 17:45  simHash\mvn_project\src\main\java\SimHash

     目录          0  2017-11-17 09:50  simHash\mvn_project\src\main\java\Test

     目录          0  2017-11-15 12:01  simHash\mvn_project\src\main\webapp\WEB-INF

     目录          0  2017-11-17 09:50  simHash\mvn_project\src\main\java

     目录          0  2017-11-15 12:01  simHash\mvn_project\src\main\resources

     目录          0  2017-11-15 12:01  simHash\mvn_project\src\main\webapp

     目录          0  2017-11-17 09:52  simHash\mvn_project\target\classes\SimHash

     目录          0  2017-11-17 09:52  simHash\mvn_project\target\classes\Test

     目录          0  2017-11-15 15:29  simHash\mvn_project\target\generated-sources\annotations

............此处省略14个文件信息

评论

共有 条评论