全手写文本聚类算法 词袋模型-->consin相似度-->UPGMA聚类

punctunation = [",", ":", ".", "'", "?", "/", "-", "+", "&", "(", ")"]
sent = ["I love sky, I love sea.", "i love sky, I love sea.", "I want to go to beijing", "I want to go to shang hai", "i want to go to beijing", "you are happy","how are you",\"today is sunday","I am liming"]
clean_tokenized = []
# for item in sent:
#     clean_tokenized.append(item.split(" "))
#
# sent = clean_tokenized
# clean_tokenized = []for s in sent:s = s.lower()for punc in punctunation:s = s.replace(punc, "")clean_tokenized.append(s)
print("clean_tokenized:",clean_tokenized)
texts = []
for item in clean_tokenized:texts.append(item.split(" "))
all_list = []
for text in texts:all_list += text
corpus = set(all_list)
corpus_dict = dict(zip(corpus, range(len(corpus))))
print("corpus:",corpus)
print("corpus_dict:",corpus_dict)
print("text:",texts)def vector_rep(text,corpus_dict):vec = []for key in corpus_dict.keys():if key in text:vec.append((corpus_dict[key], text.count(key)))else:vec.append((corpus_dict[key], 0))vec = sorted(vec, key=lambda x: x[0])vec_only = []for ve in vec:vec_only += [ve[1]]return vec_onlyfor i in texts:print(i)
vec1 = vector_rep(texts[0], corpus_dict)
vec2 = vector_rep(texts[1], corpus_dict)
print(vec1)
from math import sqrt
def similarity(vec1,vec2):inner_value = 0square_length_vec1 = 0square_length_vec2 = 0for tup1, tup2 in zip(vec1, vec2):inner_value += tup1 * tup2square_length_vec2 += tup1 ** 2square_length_vec1 += tup2 ** 2return(inner_value / sqrt(square_length_vec1*square_length_vec2))def position(vec_list):x = 0y = 0min_dis = -1000similarityv = -1000for i in range(0, len(vec_list)):for j in range(i+1, len(vec_list)):similarityv = similarity(vec_list[i], vec_list[j])if similarityv > min_dis:min_dis = similarityvx = iy = jreturn x, ydef listadd(listx,listy):return [(listx[i]+listy[i])/2 for i in range(0, len(listx))]print(listadd(vec1,vec2))def cluster(list, n):vec_list = []log = []for li in list:vec_list.append(vector_rep(li, corpus_dict))print(vec_list)while len(vec_list) > n:x,y = position(vec_list)log.append((x, y))addlist = listadd(vec_list[x], vec_list[y])vec_list.append(addlist)del vec_list[x]del vec_list[y-1]return loglog_list = cluster(texts, 4)
print("log_list:", log_list)
for lo in log_list:tem = sent[lo[0]] + sent[lo[1]]if lo[0]<lo[1]:del sent[lo[0]]del sent[lo[1]-1]else:del sent[lo[1]]del sent[lo[0]-1]sent.append(tem)
print(sent)

手动实现简单的 文本聚类算法 词袋模型+consin相似度+UPGMA聚类相关推荐

  1. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

  2. 机器学习---文本特征提取之词袋模型与tfidf特征

    假设有一段文本:"I have a cat, his name is Huzihu. Huzihu is really cute and friendly. We are good frie ...

  3. 【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[聚类算法]基于matlab划分法k-means聚类算法[含Matlab源码 1941期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  4. 聚类算法(3):DBSCAN密度聚类

    目录 1. 基本概念 2. 算法描述 3. 算法实例 4. 算法优缺点 DBSCAN(Density-Based Spatial Clustering of Application with Nois ...

  5. 聚类算法 距离矩阵_论文阅读9——AP聚类算法

    Affinity Learning for Mixed Data Clustering 论文提出了基于混合对数据进行聚类的学习框架,具体研究内容包括:1)如何处理具有混合类型属性的数据.2)如何学习数 ...

  6. dbscan和谱聚类_R 无监督聚类算法(1)K-means和层次聚类

    首先我们要解决几个问题 聚类算法主要包括哪些算法? 主要包括:K-means.DBSCAN.Density Peaks聚类(局部密度聚类).层次聚类.谱聚类. 什么是无监督学习? • 无监督学习也是相 ...

  7. k均值聚类算法案例 r语言iris_聚类分析—系统聚类

    聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,最后的结果是希望同类之间的差异性尽可能小,不同类之间的差异性尽可能大.不同的类具有能够表达异于其他类的指标,这样针对不同的类,后续就能采取不一样 ...

  8. 聚类算法(1)——层次、K-means聚类

    所谓聚类,就是将相似的事物聚集在一起,而将不相似的事物划分到不同的类别的过程,是数据分析之中十分重要的一种手段.比如古典生物学之中,人们通过物种的形貌特征将其分门别类,可以说就是一种朴素的人工聚类.如 ...

  9. 聚类算法教程(3):层次聚类算法Hierarchical Clustering Algorithms

     基本工作原理 给定要聚类的N的对象以及N*N的距离矩阵(或者是相似性矩阵),层次式聚类方法的基本步骤(参看S.C. Johnson in 1967)如下: 1.     将每个对象归为一类,共得 ...

最新文章

  1. OpenCV+python:图像梯度
  2. Mac上 如何快速玩起rocksdb
  3. 李彦宏为什么被称为AI先生,美国权威媒体给出答案
  4. ubuntu 下非交互式执行远程shell命令
  5. 清官谈mysql中utf8和utf8mb4区别,请使用utf8mb4
  6. iOS中Block的基础用法
  7. 分区表分区字段的update操作
  8. nginx多端口配置php,nginx服务器使用不同端口配置多个网站站点
  9. Android RxJava(一) create操作符的用法和源码分析
  10. cass绘制围墙lisp_CASS中用LISP完成高程值的可视化处理
  11. TexturePacker学习笔记——制作NGUI Atlas
  12. 【转】.NET Interop入门-P/Invoke和Reverse P/Invoke
  13. 【eclipse】启动不了报错java was started but returned exit code=13
  14. 打地鼠java的实验报告_java实验报告18-“打地鼠”游戏程序设计.doc
  15. python商业爬虫教程_python商业爬虫课程
  16. windows server 2016云主机如何挂载云硬盘
  17. ubuntu16.04下源码安装arachni扫描器
  18. 移动端vConsole查看控制台信息
  19. Ubuntu16.04编译android6.0.1源码记录
  20. 机器学习之算法优化(一)

热门文章

  1. 【第九周:08/19-08/23】Output整合
  2. webpack基础使用(一)
  3. Java——轻松判断某个时间是否处于某个时间段内
  4. 商业智能BI财务分析,狭义的财务分析和广义的财务分析有何不同?
  5. hdmi接口有什么用_hdmi是什么接口,hdmi接口有什么作用
  6. 冷链物流运输公司【昊鑫国际物流】申请纳斯达克IPO上市,融资1500万美元
  7. 热啊!热啊!!热啊!!!
  8. android 显示电池电量
  9. 关于ES Request cannot be executed; I/O reactor status: STOPPED 异常原因查找
  10. Java面试遇到的工厂模式