我的编程空间,编程开发者的网络收藏夹
学习永远不晚

用java计算文本相似度

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

用java计算文本相似度

遇到这样一个需求,需要计算两个文本内容的相似度,以前也接触过,下面列举几种方式,也是我在网上查了很多内容整理的,直接上代码,供大家参考,如果你也有这样的需求,希望能帮到你:

内容目录

1、字符矩阵标记对比

public static void main(String[] args) {    String aa = "在线作业成绩占课程总评成绩的30%,如未完成直接影响最终总成绩。";    String aaa = "作业成绩占课程总评成绩的60%,如未完成直接影响总成绩。";    float similarityRatio = getSimilarityRatio(aa, aaa);    System.out.println(similarityRatio); //84.375}public static float getSimilarityRatio(String str, String target) {    int d[][]; // 矩阵    int n = str.length();    int m = target.length();    int i; // 遍历str的    int j; // 遍历target的    char ch1; // str的    char ch2; // target的    int temp; // 记录相同字符,在某个矩阵位置值的增量,不是0就是1    if (n == 0 || m == 0) {        return 0;    }    d = new int[n + 1][m + 1];    for (i = 0; i <= n; i++) { // 初始化第一列        d[i][0] = i;    }    for (j = 0; j <= m; j++) { // 初始化第一行        d[0][j] = j;    }    for (i = 1; i <= n; i++) { // 遍历str        ch1 = str.charAt(i - 1);        // 去匹配target        for (j = 1; j <= m; j++) {            ch2 = target.charAt(j - 1);            if (ch1 == ch2 || ch1 == ch2 + 32 || ch1 + 32 == ch2) {                temp = 0;            } else {                temp = 1;            }            // 左边+1,上边+1, 左上角+temp取最小            d[i][j] = Math.min(Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1), d[i - 1][j - 1] + temp);        }    }    return (1 - (float) d[n][m] / Math.max(str.length(), target.length())) * 100F;}

2、海明距离计算,对比相似度

引入pom

<dependency>    <groupId>com.hankcsgroupId>    <artifactId>hanlpartifactId>    <version>portable-1.3.4version>dependency><dependency>    <groupId>org.jsoupgroupId>    <artifactId>jsoupartifactId>    <version>1.10.3version>dependency>

代码

package com.demo.test;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();    }        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;    }        private BigInteger simHash() {        tokens = cleanResume(tokens); // cleanResume 删除一些特殊字符        int[] v = new int[this.hashbits];        List<Term> termList = StandardTokenizer.segment(this.tokens); // 对字符串进行分词        //对分词的一些特殊处理 : 比如: 根据词性添加权重 , 过滤掉标点符号 , 过滤超频词汇等;        Map<String, Integer> weightOfNature = new HashMap<String, Integer>(); // 词性的权重        weightOfNature.put("n", 2); //给名词的权重是2;        Map<String, String> stopNatures = new HashMap<String, String>();//停用的词性 如一些标点符号之类的;        stopNatures.put("w", ""); //        int overCount = 5; //设定超频词汇的界限 ;        Map<String, Integer> wordCount = new HashMap<String, Integer>();        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,                // 中间的62位减一,也就是说,逢1加1,逢0减1.一直到把所有的分词hash数列全部判断完毕.                int weight = 1;  //添加权重                if (weightOfNature.containsKey(nature)) {                    weight = weightOfNature.get(nature);                }                if (t.and(bitmask).signum() != 0) {                    // 这里是计算整个文档的所有特征的向量和                    v[i] += weight;                } else {                    v[i] -= weight;                }            }        }        BigInteger fingerprint = new BigInteger("0");        for (int i = 0; i < this.hashbits; i++) {            if (v[i] >= 0) {                fingerprint = fingerprint.add(new BigInteger("1").shiftLeft(i));            }        }        return fingerprint;    }        private BigInteger hash(String source) {        if (source == null || source.length() == 0) {            return new BigInteger("0");        } else {                        while (source.length() < 3) {                source = source + source.charAt(0);            }            char[] sourceArray = source.toCharArray();            BigInteger x = BigInteger.valueOf(((long) sourceArray[0]) << 7);            BigInteger m = new BigInteger("1000003");            BigInteger mask = new BigInteger("2").pow(this.hashbits).subtract(new BigInteger("1"));            for (char item : sourceArray) {                BigInteger temp = BigInteger.valueOf((long) item);                x = x.multiply(m).xor(temp).and(mask);            }            x = x.xor(new BigInteger(String.valueOf(source.length())));            if (x.equals(new BigInteger("-1"))) {                x = new BigInteger("-2");            }            return x;        }    }        private int hammingDistance(MySimHash other) {        BigInteger m = new BigInteger("1").shiftLeft(this.hashbits).subtract(                new BigInteger("1"));        BigInteger x = this.strSimHash.xor(other.strSimHash).and(m);        int tot = 0;        while (x.signum() != 0) {            tot += 1;            x = x.and(x.subtract(new BigInteger("1")));        }        return tot;    }    public double getSemblance(MySimHash s2 ){        double i = (double) this.hammingDistance(s2);        return 1 - i/this.hashbits ;    }    public static void main(String[] args) {        String s1 = "  借鉴hashmap算法找出可以hash的key值,因为我们使用的simhash是局部敏感哈希,这个算法的特点是只要相似的字符串只有个别的位数是有差别变化。那这样我们可以推断两个相似的文本,至少有16位的simhash是一样的。具体选择16位、8位、4位,大家根据自己的数据测试选择,虽然比较的位数越小越精准,但是空间会变大。分为4个16位段的存储空间是单独simhash存储空间的4倍。之前算出5000w数据是 382 Mb,扩大4倍1.5G左右,还可以接受:)  通过这样计算,我们的simhash查找过程全部降到了1毫秒以下。就加了一个hash效果这么厉害?我们可以算一下,原来是5000w次顺序比较,现在是少了2的16次方比较,前面16位变成了hash查找。后面的顺序比较的个数是多少? 2^16 = 65536, 5000w/65536 = 763 次。。。。实际最后链表比较的数据也才 763次!所以效率大大提高!  到目前第一点降到3.6毫秒、支持5000w数据相似度比较做完了。还有第二点同一时刻发出的文本如果重复也只能保留一条和短文本相识度比较怎么解决。其实上面的问题解决了,这两个就不是什么问题了。  之前的评估一直都是按照线性计算来估计的,就算有多线程提交相似度计算比较,我们提供相似度计算服务器也需要线性计算。比如同时客户端发送过来两条需要比较相似度的请求,在服务器这边都进行了一个排队处理,一个接着一个,第一个处理完了在处理第二个,等到第一个处理完了也就加入了simhash库。所以只要服务端加了队列,就不存在同时请求不能判断的情况。 simhash如何处理短文本?换一种思路,simhash可以作为局部敏感哈希第一次计算缩小整个比较的范围,等到我们只有比较700多次比较时,就算使用我们之前精准度高计算很慢的编辑距离也可以搞定。当然如果觉得慢了,也可以使用余弦夹角等效率稍微高点的相似度算法";        String s2 = "  1、分词,把需要判断文本分词形成这个文章的特征单词。 最后形成去掉噪音词的单词序列并为每个词加上权重,我们假设权重分为5个级别(1~5)。只要相似的字符串只有个别的位数是有差别变化。那这样我们可以推断两个相似的文本, 比如:“ 美国“51区”雇员称内部有9架飞碟,曾看见灰色外星人 ” ==> 分词后为 “ 美国(4) 51区(5) 雇员(3) 称(1) 内部(2) 有(1) 9架(3) 飞碟(5) 曾(1) 看见(3) 灰色(4) 外星人(5)”, 括号里是代表单词在整个句子里重要程度,数字越大越重要。 2、hash,通过hash算法把每个词变成hash值, 比如“美国”通过hash算法计算为 100101, “51区”通过hash算法计算为 101011。 这样我们的字符串就变成了一串串数字,还记得文章开头说过的吗,要把文章变为数字计算才能提高相似度计算性能,现在是降维过程进行时。 3、加权,通过 2步骤的hash生成结果,需要按照单词的权重形成加权数字串, 比如“美国”的hash值为“100101”,通过加权计算为“4 -4 -4 4 -4 4”;“51区”的hash值为“101011”,通过加权计算为 “ 5 -5 5 -5 5 5”。 4、合并,把上面各个单词算出来的序列值累加,变成只有一个序列串。 比如 “美国”的 “4 -4 -4 4 -4 4”,“51区”的 “ 5 -5 5 -5 5 5”, 把每一位进行累加, “4+5 -4+-5 -4+5 4+-5 -4+5 4+5” ==》 “9 -9 1 -1 1 9”。 这里作为示例只算了两个单词的,真实计算需要把所有单词的序列串累加。 5、降维,把4步算出来的 “9 -9 1 -1 1 9” 变成 0 1 串,形成我们最终的simhash签名。 如果每一位大于0 记为 1,小于0 是统优先公司";        String s3 = "  算法找出可以hash的key值,因为我们使用的simhash是局部敏感哈希,这个算法的特点是只要相似的字 把需要判断文本分词形成这个文章的特征单词。 最后形成去掉噪音词的只要相似的字符串只有个别的位数是有差别变化。那这样我们可以推断两个相似的文本,单词序分词是代表单词在整个句子里重要程度,数字越大越重要。  2、hash,通过hash算法把每个词变成hash值, 比如“美国”通过hash算法计算为 100101, “51区”通过hash算法计算为 101011。 这样我们的字符串就变成了一串串数字,还记得文章开头说过的吗,要把文章变为数字加权,通过 家可能会有疑问,经过这么多步骤搞这么麻烦,不就是为了得到个 0 1 字符串吗?我直接把这个文本作为字符串输入v较,前面16位变成了hash查找。后面的顺序比较的个数是多,用hd5是用于生成唯一签来相差甚远;hashmap也是用于键值对查找,便于快速插入和查找的数据结构。不过我们主要解决的是文本相似度计算,要比较的是两个文章是否相识,当然我们降维生成了hashcode也是用于这个目的。看到这里估计大家就明白了,我们使用的sim是这样的,传统hash函数解决的是生成唯一值,比如 md5、hashmap等。md5是用于生成唯一签名串,只要稍微多加一个字符md5的两个数字看起来相差甚远;hashmap也是用于键值对查找,便于快速插入和查找的数据结构。不过我们主要解决的是文本相似度计算,要比较的是两个文章是否相识,当然我们降维生成了hashcode也是用于这个目的。看到这里估计大家就明白了,我们使用的simhash就算把文章中的字符串变成 01 串也还是可以用于计算相似度的,而传统的hashcode却不行。我们可以来做个测试,两个相差只有一个字符的文本串,“你妈妈喊你回家吃饭哦,回家罗回家罗” 和 “你妈妈叫你回家吃饭啦,回家罗回家罗”。短文本大量重复信息不会被过滤,是不是";        String s4 = "  最后形成去掉噪音词的单词序分词是代表单词在整个句子里重要程度,数字越大越重要。 最后形成去掉噪音词的单词序列并为每个词加上权重 2、hash,通过hash算法把每个词变成hash值, 比如“美国”通过hash算法计算为 100101, “51区”通过hash算法计算为 101011。 这样我们的字符串就变成了一串串数字,还记得文章开头说过的吗,分为4个16位段的存储空间是单独simhash存储空间的4倍。之前算出5000w数据是 382 Mb,扩大4倍1.5G左右,还可以接受:) 要把文章变为数字加权,通过 家可能会有疑问,经过这么多步骤搞这么麻烦,不就是为了得到个 0 1 字符串吗?我直接把这个文本作为字符串输入,用hd5是用于生成唯一签来相差甚远;hashmap也是用于键值对查找,便于快速插入和查找的数据结构。不过我们主要解决的是文本相似度计算,要比较的是两个文章是否相识,当然我们降维生成了hashcode也是用于这个目的。看到这里估计大家就明白了,我们使用的sim是这样的,传统hash函数解决的是生成唯一值,比如 md5、hashmap等。md5是用于生成唯一签名串,只要稍微多加一个字符md5的两个数字看起来相差甚远;hashmap也是用于键值对查找,便于快速插入和查找的数据结构。不过我们主要解决的是文本相似度计算,要比较的是两个文章是否相识,当然我们降维生成了hashcode也是用于这个目的。看到这里估计大家就明白了,我们使用的simhash就算把文章中的字符串变成 01 串也还是可以用于计算相似度的,而传统的hashcode却不行。我们可以来做个测试,两个相差只有一个字符的文本串,“你妈妈喊你回家吃饭哦,回家罗回家罗” 和 “你妈妈叫你回家吃饭啦,回家罗回家罗”。短文本大量重复信息不会被过滤,";        long l3 = System.currentTimeMillis();        MySimHash hash1 = new MySimHash(s1, 64);        MySimHash hash2 = new MySimHash(s2, 64);        MySimHash hash3 = new MySimHash(s3, 64);        MySimHash hash4 = new MySimHash(s4, 64);        System.out.println("======================================");        System.out.println("海明距离是:" +   hash1.hammingDistance(hash2) );        System.out.println("文本相似度是:" +   hash2.hammingDistance(hash3) );        System.out.println("海明距离是:" +   hash4.hammingDistance(hash3) );        System.out.println("文本相似度是:" +   hash1.getSemblance(hash3) );        System.out.println("海明距离是:" +   hash2.getSemblance(hash3) );        System.out.println("文本相似度是:" +   hash3.getSemblance(hash4) );        long l4 = System.currentTimeMillis();        System.out.println("总耗时: " + (l4-l3));        System.out.println("======================================");    }}

3、Jaccard计算

Jaccard计算文本相似性,效果并不咋地,但在一些应用环境上,使用还是很有意义的。

引入pom

<dependency>    <groupId>edu.stanford.nlpgroupId>    <artifactId>stanford-corenlpartifactId>    <version>4.2.2version>dependency>

代码

package com.demo.test;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import edu.stanford.nlp.ling.CoreAnnotations;import edu.stanford.nlp.ling.CoreLabel;import edu.stanford.nlp.pipeline.Annotation;import edu.stanford.nlp.pipeline.StanfordCoreNLP;import edu.stanford.nlp.util.CoreMap;import java.io.*;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Properties;import java.util.Set;import java.util.concurrent.ConcurrentSkipListSet;public class Test3 {    protected static final Logger LOGGER = LoggerFactory.getLogger(Test3.class);    public static double getSimilarity(String document1, String document2) {        //获取词干对应的文本,封装成集合        List<String> wordslist1 = getlema(document1);        List<String> wordslist2 = getlema(document2);        Set<String> words2Set = new HashSet<>();        words2Set.addAll(wordslist2);        //求交集        Set<String> intersectionSet = new ConcurrentSkipListSet<>();        wordslist1.parallelStream().forEach(word -> {            if (words2Set.contains(word)) {                intersectionSet.add(word);            }        });        //交集的大小        int intersectionSize = intersectionSet.size();        //求并集        Set<String> unionSet = new HashSet<>();        wordslist1.forEach(word -> unionSet.add(word));        wordslist2.forEach(word -> unionSet.add(word));        //并集的大小        int unionSize = unionSet.size();        //相似度分值        double score = intersectionSize / (double) unionSize;        if (LOGGER.isDebugEnabled()) {            LOGGER.debug("交集的大小:" + intersectionSize);            LOGGER.debug("并集的大小:" + unionSize);            LOGGER.debug("相似度分值=" + intersectionSize + "/(double)" + unionSize + "=" + score);        }        return score;    }    public static List<String> getlema(String text){        //词干对应的单词集合        List<String> wordslist = new ArrayList<>();;        //StanfordCoreNLP获取词干        Properties props = new Properties();  // set up pipeline properties        props.put("annotators", "tokenize, ssplit, pos, lemma");   //分词、分句、词性标注和次元信息。        StanfordCoreNLP pipeline = new StanfordCoreNLP(props);        Annotation document = new Annotation(text);        pipeline.annotate(document);        List<CoreMap> words = document.get(CoreAnnotations.SentencesAnnotation.class);        for(CoreMap word_temp: words) {            for (CoreLabel token: word_temp.get(CoreAnnotations.TokensAnnotation.class)) {                String lema = token.get(CoreAnnotations.LemmaAnnotation.class);  // 获取对应上面word的词元信息,即我所需要的词形还原后的单词                wordslist.add(lema);//                System.out.println(lema);            }        }        return wordslist;    }    public static void main(String[] args) throws UnsupportedEncodingException, FileNotFoundException {       //BufferedReader reader = new BufferedReader( new InputStreamReader( new FileInputStream( new File("")),"gbk"));        String text1 = "Gridspot can link up idle computers instances across the world to provide large scale efforts with the computing power they require at affordable prices 0103 centsCPU hour These Linux instances run Ubuntu inside a virtual machine You are able to bid on access to these instances and specify the requirements of your tasks or jobs When your bid is fulfilled you can start running the instances using SSH anywhere youd like There are grant options available to defray costs for researchers and nonprofits The Gridspot API allows you to manage instances and identify new ones You can list available instances access them and stop the instances if you so choose Each API call requires an API key that can be generated from your account page";        String text2 = "Chapoo is a cloudbased platform for collaboration and project information management The service allows project managers designers engineers and other contributors to improve productivity through better collaboration communication and coordination Chapoo offers a fullfeatured RESTful API for live queries and reports Example functions include getting items contained in a binder getting the contact image of a contact getting a list of forms from a folder and creating new folders Results are returned in JSON format";        System.out.println(getSimilarity(text1,text2));        System.out.println(getSimilarity(text1,text1));    }}

来源地址:https://blog.csdn.net/kh6417/article/details/130900517

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

用java计算文本相似度

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java算法之余弦相似度计算字符串相似率的示例分析

小编给大家分享一下java算法之余弦相似度计算字符串相似率的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java有哪些集合类Java中的集合主要分为四类
2023-06-15

Python使用gensim计算文档相似性

pre_file.py#-*-coding:utf-8-*- import MySQLdb import MySQLdb as mdb import os,sys,string import jieba import codecs relo
2022-06-04

Python文本相似性计算之编辑距离详解

编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的
2022-06-04

怎么查重python文本相似性计算simhash源码

今天小编给大家分享一下怎么查重python文本相似性计算simhash源码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。场景
2023-06-29

用Python进行简单的文本相似度分析

学习目标:利用gensim包分析文档相似度使用jieba进行中文分词了解TF-IDF模型环境:Python 3.6.0 |Anaconda 4.3.1 (64-bit)工具:jupyter notebook注:为了简化问题,本文没有剔除停用
2023-01-31

java抓取文字的最大相似度

java抓取文字的最大相似度代码:public static void main(String[] args) {//要比较的两个字符串String str1 = "汗1滴禾下土";String str2 = "汗滴禾下土";levenshtein(str1,
java抓取文字的最大相似度
2018-02-08

JavaScript如何实现文本相似度对比

本篇内容介绍了“JavaScript如何实现文本相似度对比”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、发现问题在开发过程中,难免会使用
2023-06-30

字符串相似度算法-莱文斯坦距离算法

莱文斯坦(Levenshtein)距离莱文斯坦距离可以解决字符串相似度的问题。在莱文斯坦距离中,对每一个字符都有三种操作:删除、添加、替换例如有s1和s2两个字符串,a和b是与之对应的保存s1和s2全部字符的数组,i/j是数组下标。莱文斯坦
2023-01-31

如何在Java项目中利用余弦方法实现一个相似度计算算法

本篇文章给大家分享的是有关如何在Java项目中利用余弦方法实现一个相似度计算算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。(1)余弦相似性通过测量两个向量之间的角的余弦值来
2023-05-31

python怎么实现余弦相似度文本比较

这篇文章将为大家详细讲解有关python怎么实现余弦相似度文本比较,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录