`
riching
  • 浏览: 263398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用余弦相似性原理计算文本的相似度

    博客分类:
  • java
 
阅读更多
原理参考:http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html

好多人说包不对,或者不知道哪儿下载,贴上个下载地址:https://code.google.com/p/ik-analyzer/downloads/list,附件贴上ik的包,其他的apache的commons包自己去下吧
/**
 * 
 */
package com.text;

import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;

/**
 * @author Riching
 * 
 * @date 2013-8-10
 */
public class IKMainTest {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        String str1 = "我喜欢看电视,不喜欢看电影。";
        String str2 = "我不喜欢看电视,也不喜欢看电影。";
        Map<String, Integer> tf1 = getTF(str1);
        Map<String, Integer> tf2 = getTF(str2);
        Map<String, MutablePair<Integer, Integer>> tfs = new HashMap<String, MutablePair<Integer, Integer>>();
        for (String key : tf1.keySet()) {
            MutablePair<Integer, Integer> pair = new MutablePair<Integer, Integer>(tf1.get(key), 0);
            tfs.put(key, pair);
        }
        for (String key : tf2.keySet()) {
            MutablePair<Integer, Integer> pair = tfs.get(key);
            if (null == pair) {
                pair = new MutablePair<Integer, Integer>(0, tf2.get(key));
            } else {
                pair.setRight(tf2.get(key));
            }
        }
        double d = caclIDF(tfs);
        System.out.println(d);
    }

    public static Map<String, Integer> getTF(String str) throws IOException {
        Map<String, Integer> map = new HashMap<String, Integer>();
        IKSegmenter ikSegmenter = new IKSegmenter(new StringReader(str), true);
        Lexeme lexeme = null;
        while ((lexeme = ikSegmenter.next()) != null) {
            String key = lexeme.getLexemeText();
            Integer count = map.get(key);
            if (null == count) {
                count = 1;
            } else {
                count = count + 1;
            }
            map.put(key, count);
        }
        return map;
    }

    public static double caclIDF(Map<String, MutablePair<Integer, Integer>> tf) {
        double d = 0;
        if (MapUtils.isEmpty(tf)) {
            return d;
        }
        double denominator = 0;
        double sqdoc1 = 0;
        double sqdoc2 = 0;
        Pair<Integer, Integer> count = null;
        for (String key : tf.keySet()) {
            count = tf.get(key);
            denominator += count.getLeft() * count.getRight();
            sqdoc1 += count.getLeft() * count.getLeft();
            sqdoc2 += count.getRight() * count.getRight();
        }
        d = denominator / (Math.sqrt(sqdoc1) * Math.sqrt(sqdoc2));
        return d;
    }
}


分享到:
评论
3 楼 Interceptor2013 2015-10-23  
org.wltea.analyzer.core.IKSegmenter;
这jar包可以发一下吗?    1306606945@qq.com
谢谢
2 楼 riching 2015-05-10  
liudeyuan 写道
..运行你的代码时出现了
java.lang.UnsupportedClassVersionError: org/wltea/analyzer/sample/IKAnalzyerDemo : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)

怎么破~


版本不兼容吧,下载个最新版本试试
1 楼 liudeyuan 2015-04-15  
..运行你的代码时出现了
java.lang.UnsupportedClassVersionError: org/wltea/analyzer/sample/IKAnalzyerDemo : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)

怎么破~

相关推荐

    (python)使用余弦相似度算法计算两个文本的相似度的简单实现

    在Python编程环境中,余弦相似度算法是一种常用于计算文本相似度的方法,尤其适用于文档向量化处理后的场景。本文将详细介绍如何使用Python实现余弦相似度,并探讨其背后的概念、步骤以及具体源码分析。 余弦相似度...

    Python代码实现 余弦相似度(文本相似度算法)

    余弦相似度算法

    易语言快速计算文本相似度

    例如,Jaccard相似度适用于计算集合的相似性,而余弦相似度则适合于向量空间模型的文本比较。 易语言快速计算文本相似度源码的实现可能结合了这些经典算法,也可能采用了自定义的方法。通过阅读和理解源码,开发者...

    text-similarity-php, 通过余弦定理 分词计算文本相似度PHP版.zip

    文本相似度计算是自然语言处理领域的一个重要任务,主要用于比较两段文本的相似性或相关性。在这个项目中,我们关注的是PHP实现的一种基于余弦定理的分词计算文本相似度的方法。余弦定理通常被用于解决几何问题,但...

    计算文本相似度代码5.0_代码相似度_unionecb_textcomparison_textsimilarity_文本相似度_

    本项目名为“计算文本相似度代码5.0_代码相似度_unionecb_textcomparison_textsimilarity_文本相似度”,显然是一个使用C#语言实现的文本相似度比较工具。下面我们将深入探讨这个主题,了解相关的知识点。 首先,让...

    TF-IDF与余弦相似性的应用

    余弦相似性(cosine similarity)是一种常用的文本相似度计算方法,应用于文本分类、文本聚类等领域。该方法的核心思想是将两个文档的词频向量进行点积运算,得到两个文档的相似度。余弦相似性的优点是可以捕捉到...

    易语言向量法计算文本相似度

    这里我们将深入探讨易语言中的向量法计算文本相似度的原理和实现。 向量法,通常指的是词袋模型(Bag-of-Words Model)或TF-IDF(Term Frequency-Inverse Document Frequency)模型,这些方法将文本转化为数值向量...

    易语言快速计算文本相似度源码.rar

    文本相似度计算是一种评估两个或多个文本字符串之间相似程度的技术。在易语言中实现这样的功能,通常会涉及字符串处理、算法以及可能的数学统计方法。下面我们将深入探讨这个主题。 首先,要计算文本相似度,我们...

    余弦相似性获取文章相似度的java实现

    首先,我们要理解余弦相似性的基本原理。假设我们有两个文档D1和D2,我们可以将它们视为向量,其中每个维度代表一个词汇项,向量的长度表示文档中该词汇项的频率。余弦相似性是通过计算这两个向量的夹角余弦值来衡量...

    易语言快速计算文本相似度源码

    在给定的标题“易语言快速计算文本相似度源码”中,我们可以理解这是一段使用易语言编写的代码,用于高效地计算两个文本之间的相似度。这种技术在信息检索、自然语言处理和文本挖掘等领域具有广泛应用。 文本相似度...

    基于Hadoop的文本相似度计算

    在这个项目中,我们利用TF-IDF(词频-逆文档频率)和向量空间模型来计算文本之间的相似性,同时采用IKAnalyzer作为中文分词工具。 TF-IDF是一种统计方法,用于评估一个词对于文档集或语料库中的某篇文档的重要程度...

    易语言源码易语言快速计算文本相似度源码.rar

    4. **余弦相似度**:这是一种常用的文本相似度计算方法,通过计算两个文本向量在高维空间中的夹角余弦值来衡量它们的相似性。在易语言中,可以构建词袋模型,将文本转化为向量,然后计算余弦值。 5. **Jaccard...

    余弦相似度计算代码

    它通过计算两个向量之间的夹角余弦值来评估它们之间的相似性:值越接近1表示两向量越相似;值越接近0则表示两向量差异越大。 #### 二、代码解读 本节将详细分析给定的Java代码,并从中提取出关键的知识点。 #####...

    文本相似度对比器(Java)

    文本相似度计算通常基于词频、余弦相似性或者TF-IDF等算法。在这个Java程序中,可能采用了这些方法之一来度量两个文本之间的相似度。词频统计每个文本中单词出现的次数,余弦相似性通过计算两个文本向量的夹角余弦...

    C#余弦算法比较文章相似度

    在IT领域,文本相似度计算是一项重要的任务,用于找出两篇或多篇文章之间的相似性。本文主要探讨了如何利用C#编程语言实现基于TF-IDF的余弦算法来完成这一任务,特别是针对文章内容以及图片的相似度比较。下面将详细...

    文本相似度计算数据文本相似度计算数据

    在文本相似度计算中,常见的方法有余弦相似度、Jaccard相似度、编辑距离(Levenshtein Distance)、Jaccard相似系数等。而随着深度学习的发展,基于神经网络的方法,如Siamese网络、BERT、RoBERTa等,已成为主流。...

    易语言文本相似度判断模块源码

    常见的文本相似度计算方法有Jaccard相似度、余弦相似度、Levenshtein距离等。这些方法可以帮助我们量化两段文本的相似性,从而决定它们是否具有相同或相近的意思。 2. **字符串处理**: 易语言提供了丰富的字符串...

    kmeans算法 文本相似度计算(可控制台手动输入数据)

    在文本相似度计算中,KMeans可以用来识别和归类具有相似主题或内容的文本。以下是对这个主题的详细解释。 ### KMeans算法基本原理 1. **初始化**: 首先,选择k个初始质心,通常是随机选取数据集中的一些样本点。 2...

    文本相似度

    通过比较这些词向量的相似性,可以计算文本的相似度。 8. **段落向量(Paragraph Vector)**,如Doc2Vec:这是词嵌入的一种扩展,旨在对整个段落或文档进行向量化,从而更好地捕捉上下文信息。 9. **深度学习方法*...

    人工智能大作业:关于计算文本相似度的深度神经网络模型与算法研究分析(BERT、SentenceBERT、SimCSE).zip

    在本项目中,我们主要探讨的是人工智能领域的一个关键任务——计算文本相似度,这涉及到深度学习、机器学习以及自然语言处理等多方面的技术。通过使用深度神经网络模型,尤其是BERT(Bidirectional Encoder ...

Global site tag (gtag.js) - Google Analytics