我是聚类技术的新手,我非常重视您可以为我下面的问题提供的任何输入。基本上,我想根据url的结构模式对它们进行聚类。例如
- cluster1 -简单url https://domain/path/file
- cluster2 -缩短url
- cluster3 -重定向url
- …
- 集群k -新的URL模式
给定一个URL数据集,我想了解有多少不同的URL模式集群存在,然后直观地看到差异。
我在现有方法中看到的是集群域(将同一网站的url聚集在一起)。这不是我所期望的。当我尝试基于nlp(基于词)的相似性聚类时,同一网站的url往往有相同的词,差异很小。
相反,我想关注URL结构和识别URL模式。删除所有的特殊字符,并仅为每个URL创建一个单词包,将使URL结构无效。谁能帮我确定一个合适的聚类技术以及一个矢量化技术来识别不同的URL模式聚类?
提前感谢Matheesha
下面是一个如何聚类文本的示例。
import numpy as np
from sklearn.cluster import AffinityPropagation
import distance
words = "kitten belly squooshy merley best eating google feedback face extension impressed map feedback google eating face extension climbing key".split(" ") #Replace this line
words = np.asarray(words) #So that indexing with a list will work
lev_similarity = -1*np.array([[distance.levenshtein(w1,w2) for w1 in words] for w2 in words])
affprop = AffinityPropagation(affinity="precomputed", damping=0.5)
affprop.fit(lev_similarity)
for cluster_id in np.unique(affprop.labels_):
exemplar = words[affprop.cluster_centers_indices_[cluster_id]]
cluster = np.unique(words[np.nonzero(affprop.labels_==cluster_id)])
cluster_str = ", ".join(cluster)
print(" - *%s:* %s" % (exemplar, cluster_str))
结果:
- *eating:* climbing, eating
- *google:* google, squooshy
- *feedback:* feedback
- *face:* face, map
- *impressed:* impressed
- *extension:* extension
- *key:* belly, best, key, kitten, merley