文本相似度的设计与实现

9 篇文章 11 订阅
订阅专栏

欢迎关注“程序杂货铺”公众号,里面有精彩内容,欢迎大家收看^_^

文本相似度的设计与实现

摘要:本文主要设计并实现了一个文本相似度系统,该系统主要功能计算文档之间的相似度,通过使用向量空间模型(VSM,Vector Space Model)及余弦相似度计算公式计算文档之间的相似度,数据预处理过程中加入word2vec模型进行语义扩充,从而能够匹配到更多相关文档。

1. 向量空间模型

向量空间模型(VSM, Vector SpaceModel)由Salton等人于20世纪70年代年提出[1,2]。向量空间模型的主要思想是将文本内容的处理简化为向量空间中的向量运算,这样将空间上的相似度转化为语义上的相似度。当文档被表示为文档空间的向量时,便可通过计算向量之间的相似性来度量文档间的相似性。文本处理中最常用的相似性度量方式是余弦距离。

向量空间模型的基本思想:

给定一篇文档D=D(T1,T2,…Ti,…,Tn),若Ti在文档中既可以重复出现又存在先后次序,因此分析起来会较为困难。针对上述情况,暂不考虑Ti的顺序,并要求Ti互异,此时可将T1,T2,…Ti,…,Tn看作n维坐标,每一维对应相应值Wi,因此D(W1,W2,…,Wi,…,Wn)便可以看作一个n维向量。

例如:有一篇文档D={大家好,才是真的好},首先进行分词后转换为D={大家/好/才是/真的/好},之后提取出公因词D={大家,好,才是,真的},最后通过向量空间模型将文档转换为对应的向量D={1,2,1,1}。

向量空间模型只是将文档转换为方便计算的格式,若进行相似度计算,还需使用相似度计算公式进行计算。本文使用余弦相似度计算公式。

2. 余弦相似度

余弦相似度计算公式广泛应用于文本数据之间的相似度计算过程中。其数学表达如下:

计算过程如下:

例如,有2个文档D1={大家好},D2={才是真的好},首先将D1、D2分词后,D1={大家/好},D2={才是/真的/好},其次提取出公因词D={大家,好,才是,真的},然后通过向量空间模型转换成向量表达,D1={1,1,0,0},D2={0,1,1,1},最后进行相似度计算

3. 文本相似度系统

本文主要使用向量空间模型及余弦相似度距离公式进行文本相似度计算任务,系统的基本架构如下图1所示:

其基本思想为:将文档输入系统,对文档进行数据预处理操作,数据预处理完成后使用向量空间模型将词组转化为向量,之后使用余弦相似度计算公式求解文档之间的相似度,最终将计算后的结果展示出来。

数据预处理阶段,包括分词、取停用词、word2vec语义扩展,其流程如下图2所示:

在word2vec语义扩展阶段,Word2vec是Google于2013年发布的一款基于深度学习的开源工具包,主要用于将单词以向量形式表示[3]。Word2vec首先使用语料训练模型,待模型训练结束后,将新的单词输入模型进行预测,模型可按相关度排序将最相近的预测单词展现给用户,通常而言,会将top30展示给用户。

针对文档语义扩充,系统会先使用搜狗新闻语料训练CBOW模型,待模型训练结束后,将本档中的单词输入CBOW模型进行预测,最终将预测结果扩充回文档中,用于向量空间模型。

同样以之前的2篇文档为例,D1={大家/好},D2={才是/真的/好},通过word2vec模型后,D1={大家/好/很好/不错},D2={才是/真的/好/很好/不错},提取出公因词D={大家,好,很好,不错,才是,真的},然后通过向量空间模型转换成向量表达,D1={1,1,1,1,0,0},D2={0,1,1,1,1,1},最后进行相似度计算

通过比较两次的Score值可得出,通过word2vec能够提高文本相似度的计算分值。

另外系统会计算文档中每一句话所对应的最大匹配及其相似度值,针对文档与文档的相似度计算,本文提出一种平均相似度计算公式,即:

其中n(dicList1)是所求文档中包含的句子个数,公式的主要思路即将每句话的最大匹配相似度叠加后求取平均值。

4. 系统设计

相应代码如下:

	/**
	 * 程序运行入口
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		String dir,inputPath1,inputPath2,outputPath,word2vecModel,str1,str2;
		long start,end,dur;
		start = System.currentTimeMillis();
		dir = "data/test/";
		inputPath1 = dir + "doc3.txt";
		inputPath2 = dir + "doc3.txt";
		dir = "data/result/";
		outputPath = dir + "out3_3.txt";
		word2vecModel = "model/vectors-sougou.bin";
		
		FileHandler fh = new FileHandler();
		List<String> docList1 = fh.putFileToList(inputPath1);
		List<String> docList2 = fh.putFileToList(inputPath2);
		Tool.initWriter1(outputPath);
		
		Word2VEC w = new Word2VEC() ;
        	w.loadGoogleModel(word2vecModel) ;
        
        	Model model = new Model();
        	model.run(docList1, docList2 ,w);
        
        	end = System.currentTimeMillis();
        	dur = end - start;
        	System.out.println("dur time = " + (1.0 * dur / 1000) + " s");
        	System.out.println("dur time = " + (1.0 * dur / (1000 * 60)) + " min");
        
	}/**
	 * 程序运行入口
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		String dir,inputPath1,inputPath2,outputPath,word2vecModel,str1,str2;
		long start,end,dur;
		start = System.currentTimeMillis();
		dir = "data/test/";
		inputPath1 = dir + "doc3.txt";
		inputPath2 = dir + "doc3.txt";
		dir = "data/result/";
		outputPath = dir + "out3_3.txt";
		word2vecModel = "model/vectors-sougou.bin";
		
		FileHandler fh = new FileHandler();
		List<String> docList1 = fh.putFileToList(inputPath1);
		List<String> docList2 = fh.putFileToList(inputPath2);
		Tool.initWriter1(outputPath);
		
		Word2VEC w = new Word2VEC() ;
        	w.loadGoogleModel(word2vecModel) ;
        
        	Model model = new Model();
        	model.run(docList1, docList2 ,w);
        
        	end = System.currentTimeMillis();
        	dur = end - start;
        	System.out.println("dur time = " + (1.0 * dur / 1000) + " s");
        	System.out.println("dur time = " + (1.0 * dur / (1000 * 60)) + " min");
        
	}

数据预处理阶段如下:

public class FileHandler {
	
	public static FileReader fr=null;
	public static BufferedReader br=null;
	public static String line=null;
	
	/**
	 * input:path
	 * 将文件内容添加入list中,一句一条
	 */
	public List<String> putFileToList(String path) {
		
		List<String> docList = new ArrayList<String>();
		try {
			fr = new FileReader(path);
			br = new BufferedReader(fr);
			while ((line = br.readLine()) != null) {
				String[] strArr;
				if(line.contains(".")){
					strArr = line.split(".");
					System.out.println(strArr.length);
				}else if (line.contains("。")) {
					strArr = line.split("。");
				}else if (line.contains(".")) {
					strArr = line.split(".");
				}else if (line.contains(";")) {
					strArr = line.split(";");
				}else {
					strArr = new String[1];
					strArr[0] = line;
				}
				int i,n;
				n = strArr.length;
				for(i = 0;i < n;i++){
					docList.add(strArr[i]);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return docList;
	}
	
	/**
	 * input:path
	 * output:List<String>
	 * 读取词典信息,以list返回词典
	 */
	public List<String> readDic(String path) {
		List<String> list = new ArrayList<String>();
		try {  
            fr=new FileReader(path);
			br=new BufferedReader(fr);
            while ((line=br.readLine()) != null ) {  
                StringTokenizer st = new StringTokenizer(line);
                while(st.hasMoreElements()){
                	list.add(st.nextToken());
                }
			}
            br.close();
            br.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return list;
	}
	
}

 

public class StringHandler {
	
	public static byte[] bt;
	public static InputStream is;
	public static Reader read;
	public static Lexeme t;
	public static IKSegmenter iks;
	
	/**
	 * input:str
	 * 将字符串分词转换成数组
	 */
	public List<String> stringToArray(String str) {
		
		List<String> list = new ArrayList<String>();
		bt = str.getBytes();
		is = new ByteArrayInputStream(bt);
		read = new InputStreamReader(is);
		iks = new IKSegmenter(read, true);
		try {
			while ((t = iks.next()) != null) {
				list.add(t.getLexemeText());
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
		
	}
	
	/**
	 * input:arr
	 * 使用word2vec将字符数组内容扩充
	 */
	public List<String> extendWord(Word2VEC w, List<String> list) {
	
		List<String> tempList = new ArrayList<String>();
		Set<WordEntry> temp;
		Iterator iter;
		WordEntry entry;
		int i,n;
		n = list.size();
		for(i = 0;i < n;i++){
			temp = w.distance(list.get(i));
			iter = temp.iterator();
			if(!tempList.contains(list.get(i))){
				tempList.add(list.get(i));
			}
			while(iter.hasNext()){
				entry = (WordEntry) iter.next();
				if(!tempList.contains(entry.name)){
					tempList.add(entry.name);
				}
			}
		}
		return tempList;
		
	}
	
	/**
	 * input:list,stopWordsPath
	 * 删除停用词,通过读取stopWordsPath中的停用词表,将list中的停用词删除,并返回去除停用词后的list
	 */
	public List<String> deleteStopWords(List<String> list, String path2) {
		
		FileHandler fh = new FileHandler();
		List<String> stopDic = fh.readDic(path2);
		List<String> temp = new ArrayList<String>();
		int i,n;
		n = list.size();
		try {  
			for(i = 0;i < n;i++){
				if(!stopDic.contains(list.get(i))){
					temp.add(list.get(i));
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return temp;
		
	}
}
 

模型计算阶段如下:

public class Model {

	/**
	 * input:docList1,docList2 主方法入口及控制器
	 */
	public void run(List<String> docList1, List<String> docList2, Word2VEC w) {
		int i, j, n1, n2;
		double[] similarArr;
		int[] locArr;
		double max, temp;
		int loc;
		n1 = docList1.size();
		n2 = docList2.size();
		similarArr = new double[n1];
		locArr = new int[n1];
		for (i = 0; i < n1; i++) {
			max = 0.0;
			temp = 0.0;
			loc = 0;
			for (j = 0; j < n2; j++) {
				try {
					temp = getSimilar(docList1.get(i), docList2.get(j), w);
				} catch (IOException e) {
					temp = 0.0;
					e.printStackTrace();
				}
				if (temp > max) {
					max = temp;
					loc = j;
				}
			}
			similarArr[i] = max;
			locArr[i] = loc;
		}
		Tool.output(docList1, docList2, locArr, similarArr);
	}

	/**
	 * input:str1,str2 计算2个字符串之间的相似度
	 */
	public double getSimilar(String str1, String str2, Word2VEC w) throws IOException {

		double ret = 0.0;
		// 创建向量空间模型,使用map实现,主键为词项,值为长度为2的数组,存放着对应词项在字符串中的出现次数
		Map<String, int[]> vectorSpace = new HashMap<String, int[]>();
		int[] itemCountArray = null;// 为了避免频繁产生局部变量,所以将itemCountArray声明在此
		Iterator iter;
		double vector1Modulo = 0.00;// 向量1的模
		double vector2Modulo = 0.00;// 向量2的模
		double vectorProduct = 0.00; // 向量积
		List<String> list1,list1_temp,list2,list2_temp,temp1,temp2;
		
		StringHandler sh = new StringHandler();
		
		list1_temp = sh.stringToArray(str1);
		list2_temp = sh.stringToArray(str2);
		
		/*
		//使用word2vec扩充语义
		temp1 = sh.stringToArray(str1);
		temp2 = sh.stringToArray(str2);
		list1 = sh.extendWord(w, temp1);
		list2 = sh.extendWord(w, temp2);
		*/
		list1 = sh.deleteStopWords(list1_temp, Conf.stopWordsPath);
		list2 = sh.deleteStopWords(list2_temp, Conf.stopWordsPath);
		
		int i,n;
		n = list1.size();
		for (i = 0; i < n; ++i) {
			if (vectorSpace.containsKey(list1.get(i)))
				++(vectorSpace.get(list1.get(i))[0]);
			else {
				itemCountArray = new int[2];
				itemCountArray[0] = 1;
				itemCountArray[1] = 0;
				vectorSpace.put(list1.get(i), itemCountArray);
			}
		}
		
		// 对str2处理

		n = list2.size();
		for (i = 0; i < n; ++i) {
			if (vectorSpace.containsKey(list2.get(i)))
				++(vectorSpace.get(list2.get(i))[1]);
			else {
				itemCountArray = new int[2];
				itemCountArray[0] = 0;
				itemCountArray[1] = 1;
				vectorSpace.put(list2.get(i), itemCountArray);
			}
		}

		// 计算相似度
		iter = vectorSpace.entrySet().iterator();
		while (iter.hasNext()) {
			Map.Entry entry = (Map.Entry) iter.next();
			itemCountArray = (int[]) entry.getValue();
			vector1Modulo += itemCountArray[0] * itemCountArray[0];
			vector2Modulo += itemCountArray[1] * itemCountArray[1];
			vectorProduct += itemCountArray[0] * itemCountArray[1];
		}
		vector1Modulo = Math.sqrt(vector1Modulo);
		vector2Modulo = Math.sqrt(vector2Modulo);
		// 返回相似度
		ret  = (vectorProduct / (vector1Modulo * vector2Modulo));
		return ret;

	}

}

 

 

参考文献:

 

[1]Salton G, Lesk M E. Computer Evaluation of Indexing and Text Processing[J].Journal of the Acm, 1968, 15(1):8-36.

[2]Salton. The SMART Retrieval System—Experiments in Automatic DocumentProcessing[C]// Prentice-hall, Inc Upper Saddle River. Prentice-Hall, Inc.1971.

[3]苏增才.基于word2vec和SVMperf的网络中文文本评论信息情感分类研究[D].河北科技大学,2015.


本文代码下载地址:

http://download.csdn.net/detail/u013473512/9742055

https://github.com/Emmitte/DocDistance

欢迎关注“程序杂货铺”公众号,里面有精彩内容,欢迎大家收看^_^

基于python的文本相似度计算系统设计实现.docx
08-10
基于python的文本相似度计算系统设计实现.docx
利用TF_IDF算法计算两个英文文章的文本相似度(C++实现
12-07
利用TF_IDF算法计算两个英文文章的文本相似度(C++实现),提取文本关键词,仅用于应付课程任务。
余弦相似度
周红伟讲AI
05-29 1393
余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。这结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为-1到1之间。 注意这上下界对任何维度的向量空间中都适用,而且余弦相似性
余弦距离及高维数据相似度计算介绍
weixin_46713695的博客
08-03 3177
余弦距离介绍
使用AI开源平台:文本相似度算法的应用(可本地化部署)
最新发布
04-08 946
文本相似度算法能够衡量两个短文本之间的语义相似性。这种算法的核心在于通过先进的自然语言处理技术,理解文本的深层含义,并将其转化为一个实数值,以此来表示两个文本的相似程度。在实际应用中,这种算法的输出值介于0到1之间,数值越大,表示两个文本语义越相似。
相似度算法余弦相似度
dream_home8407的博客
10-10 1426
余弦相似度
python学习笔记—余弦相似度、数据预处理
m0_64426809的博客
10-21 1195
计算余弦相似度过程步骤,数据预处理:1.空值 None 和缺失值 NaN 的处理;2.重复值的处理;3.异常值的处理;4.更改数据类型
相似度计算】详解文本相似度计算(介绍、公式)
程序星空实验室
06-08 1万+
相似度算法主要任务是衡量对象之间的相似程度,是信息检索、推荐系统、数据挖掘等的一个基础性计算。现有的关于相似度计算的方法,基本上都是基于向量的,也即计算两个向量之间的距离,距离越近越相似。欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离),在二维和三维空间中的欧氏距离就是两点之间的实际距离。欧氏距离是最常用的距离计算公式,衡量的是多维空间中各个点之间的绝对距离,当数据很稠密并且连续时,这是一种很
毕业设计:python文本相似度计算系统(源码 + 数据库 + 说明文档)
06-10
毕业设计:python文本相似度计算系统(源码 + 数据库 + 说明文档) 第二章 可行性分析 7 2.1 业务流程可行性分析 7 2.2 经济可行性 7 2.3 技术可行性 8 2.4 运行可行性 8 第三章 需求分析 8 3.1 文本相似度的应用 8 ...
基于VSM模型的文本相似度检查软件的设计实现-本科毕业论文(设计)
12-14
因此,文本相似度检测应运而生。 本次设计的基于 VSM 模型的文档相似度检查系统主要是进行一个理论的研究。系统 适用于对学生提交的实验报告、电子档作业等进行检测,从而提高学生独立完成作业的积 极性。本系统基于...
毕业设计-基于python文本相似度计算系统毕业设计实现(源码+数据库+演示视频)
07-02
 前端模块主要包括用户界面和用户交互,用户通过网页进行文本相似度查询。  后端模块主要包括预处理、特征提取、相似度计算和结果呈现。 其中,数据预处理是对输入的文本进行清洗、分词、去除停用词等相关文本...
学习笔记管理系统的设计实现
07-20
前台用户模块 用户的登陆,注册,注销。 首页模块,优秀笔记模块,最新笔记模块,学习笔记模块。 学习计划模块,学习问题模块,收藏笔记模块。 后台管理模块 管理员的登陆,注销。 学习笔记管理,学习计划管理,学习问题管理,笔记评论管理。
计算文本相似度的常用算法
热门推荐
氧小氢的博客
03-07 2万+
NLP、数据挖掘领域中,文本分析是一个很重要的领域,这有助于我们去让计算机理解语言的作用和使用。文本分析是数据挖掘的重要手段,利用文本分析,我们将很快的读取到一本书、一篇文章、一段话中的关键词和核心思想,而文本相似度就是我们用来剔除无用信息或者重复信息的重要手段,让计算机去找文本中的不同。 在生活中,信息检索、数据挖掘、机翻译、文档复制检测等领域都应用到“文本相似度”。文本不仅仅是文字,文本相似度的应用更广,除了文字的匹配,还可以是图片、音频等,因为它们的实质都是在计算机中都是以二进制的方式存在的。相.
文本相似度的几种计算方式
theowl13的博客
02-18 2148
s1=(x1,x2,x3)s_1=(x_1,x_2,x_3)s1​=(x1​,x2​,x3​) s2=(y1,y2,y3)s_2=(y_1,y_2,y_3)s2​=(y1​,y2​,y3​) 欧氏距离 d=∣s1−s2∣=(x12−y12)+(x22−y22)+(x32−y32) d=|s_1-s_2|=\sqrt{(x_1^2-y_1^2)+(x_2^2-y_2^2)+(x_3^2-y_3^2)} d=∣s1​−s2​∣=(x12​−y12​)+(x22​−y22​)+(x32​−y32​)​ 缺点 余
向量空间模型算法( Vector Space Model )
weixin_43184636的博客
01-16 8541
概念介绍 向量空间模型(VSM:Vector Space Model)由Salton等人于20世纪70年代提出,并成功 地应用于文本检索系统。 VSM概念简单,把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似 度表达语义相似度,直观易懂。当文档被表示为文档空间的向量,就可以通过计算向量之间 的相似性来度量文档间的相似性。文本处理中最常用的相似性度量方式是余弦距离。 M个无序...
计算文本相似度
周红伟讲AI
06-02 1万+
 计算文本相似度 推荐 2收藏 简单讲解 上一章有提到过[基于关键词的空间向量模型]的算法,将用户的喜好以文档描述并转换成向量模型,对商品也是这么处理,然后再通过计算商品文档和用户偏好文档的余弦相似度文本相似度计算在信息检索、数据挖掘、机翻译、文档复制检测等领域有着广泛的应用。 比如舆论控制,我们假设你开发了一个微博网站,并且已经把世界上骂人的句子都
数据挖掘学习笔记:余弦相似性
一颗胡萝卜的秘密基地
04-07 3295
定义 余弦相似性(余弦相似度):通过计算两个向量的夹角余弦值来评估他们的相似性。 0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。这结果是与向量的长度无关的,仅仅与...
向量空间模型(VSM) (转)
weixin_30664051的博客
01-07 440
向量空间模型将文档映射为一个特征向量V(d)=(t1,ω1(d);…;tn, ωn(d)),其中ti(i=1,2, …,n)为一列互不雷同的词条项,ωi(d)为ti在d中的权值, 一般被定义为ti在d中出现频率tfi(d)的函数,即 。 在信息检索中常用的词条权值计算方法为 TF-IDF 函数,其中N为所有文档的数目,ni为含有词条ti的文档数目。TF-IDF公式有很多变种,下面是一个常用...
基于深度学习的文本相似度检测系统的设计实现
03-07
感谢您的提问。基于深度学习的文本相似度检测系统的设计实现,需要考虑数据预处理、模型选择、训练和评估等方面。首先,需要对文本数据进行清洗、分词、去停用词等预处理操作,以便提取文本的特征。其次,可以选择使用诸如Siamese网络、BERT等模型进行文本相似度计算。在训练过程中,可以使用交叉熵损失函数、余弦相似度等方法进行优化。最后,可以使用F1值、准确率等指标对模型进行评估。希望这些信息能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 随机梯度下降法介绍及其参数讲解 191642
  • Causal ML学习笔记 188037
  • Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate学习笔记 183041
  • 基于电信行业的AIOps应用与实践 182805
  • 机器学习常见算法整理 182673

分类专栏

  • Flink 1篇
  • 编译 1篇
  • ClickHouse 3篇
  • 人工智能 5篇
  • C++ 1篇
  • python 2篇
  • AIOps 1篇
  • Hadoop 1篇
  • 笔试算法
  • 面试算法 1篇
  • Kmeans 2篇
  • 机器学习 9篇
  • 设计 1篇
  • 设计模式 1篇
  • docker 1篇
  • ElasticSearch 3篇
  • 大数据 15篇
  • Linu
  • Linux 4篇
  • zookeeper 2篇
  • shell 2篇
  • redis 3篇
  • zabbix 1篇

最新评论

  • ClickHouse踩坑指南

    烫不死的蚂蚁: 说了一大堆废话,一点用都没有,说点建设性的东西例如不支持NVL用什么代替,不支持NVL难道运行的时候发现不了吗?

  • ClickHouse与MySQL查询对比测试

    nothing*: 您好,请问可以分享您使用的表吗

  • Ansible批量安装clickhouse集群(shell脚本方式)

    北城&L: 一个shell 模块 吃遍天

  • python实现约瑟夫环问题

    亚索不会吹风: 大佬写的好啊为什么会有如此好python的文章!欢迎回访我的博客

  • 网页/网站/博客等刷点击率(流量)方法

    Emmitte: 可以使用java或Python调用curl相关方法接口即可实现

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • java调用ambari api示例
  • flink-1.15.X编译Runtime web模块失败解决
  • Ansible批量安装clickhouse集群(shell脚本方式)
2023年1篇
2022年3篇
2021年7篇
2020年1篇
2019年4篇
2018年5篇
2017年12篇
2016年3篇
2015年1篇

目录

目录

评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司百色网站建设设计推荐东莞百度seo报价梧州模板网站建设推荐庆阳网站制作设计昭通百姓网标王推广公司玉林网站优化按天计费哪家好邵阳优秀网站设计公司衡阳如何制作网站永湖建网站公司漳州建网站哪家好永新模板制作茂名设计公司网站报价常州SEO按天计费多少钱驻马店网站设计模板价格通化网站搜索优化报价荷坳网站设计模板哪家好坑梓关键词排名包年推广多少钱娄底seo公司包头外贸网站设计报价咸宁seo报价黑河网站seo优化价格聊城关键词排名包年推广推荐抚顺网站推广哪家好张家口关键词排名包年推广丹竹头网站开发推荐湛江网站开发报价定西百度网站优化排名公司泉州网站优化按天收费文山百度竞价包年推广价格桐城优秀网站设计价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化