假设字母表示“图案”并且数字被认为是数字而不是确切的数字,这就是我要做的:
首先 - 将数字转换为数字占位符 ( #)
import re
s = re.sub("\d",s,"#")
然后我会将字符串转换为 char 级别的 bag-of-bigrams 向量
from sklearn.feature_extraction.text import CountVectorizer
vecs = CountVectorizer(s, analyzer="char_wb", ngram_range=(1,3))
经过这两个步骤,我们从任何字符串中得到了一个稀疏向量:
'ab123' --> {" a":1,"ab":1,"b#","##":2,"# ":1}
接下来,我们要将这些向量转换为成对距离矩阵并按该距离进行聚类。
from sklearn.metrics.pairwise import pairwise_distances
from scipy.cluster import hierarchy
def link_cluster(X, threshold=0.1, metric="cosine", algo="average"):
X = X.todense()
Z = hierarchy.linkage(X, algo, metric=metric)
C = hierarchy.fcluster(Z,threshold, criterion="distance")
return C
你的最终结果是
C = link_cluster(vecs)