聚类 1-gram 字符串

数据挖掘 机器学习 聚类 相似
2022-03-07 05:37:35

我有一个很大的邮件地址列表(大约一百万),我想使用/调整/创建一个算法来找到它们之间的相似之处(基本上是对它们进行聚类)。

到目前为止我检查过的所有算法,例如 n-gram 变体、词袋等,仅用于对属于上下文的字符串进行聚类,但情况并非如此。

到目前为止,我已经尝试过LevenstheinLCS它们都非常准确,但我对使用机器学习技术的算法感兴趣,如果此任务存在这样的算法。对于我的数据集,它们也很慢。

1个回答

你说:

到目前为止我检查过的所有算法,例如 n-gram 变体、词袋等,仅用于对属于上下文的字符串进行聚类,但情况并非如此。

但是,如果您不将标记视为完整的单词,而是将其视为字符的组合,则仍然可以使用这些算法。

这是使用 Sklearn 的 Python 中此类算法的示例。

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans

data = [
    'alex@examplemail.com',
    'bernard@examplemail.com',
    'chris@newmail.com',
    'dorothy@nemail.com',
    'emily@examplemail.com'
]

X = TfidfVectorizer(analyzer='char').fit_transform(data)

kmeans = KMeans(n_clusters=2).fit(X)

for cluster in set(kmeans.labels_):
    print('\nCluster: {}'.format(cluster))
    for i, label in enumerate(kmeans.labels_):
        if label == cluster:
            print(data[i])

> Cluster: 0
> alex@examplemail.com
> bernard@examplemail.com
> emily@examplemail.com
> 
> Cluster: 1
> chris@newmail.com
> dorothy@nemail.com

主要技巧是TfidfVectorizer(analyzer='char'),您不处理n-gram单词,而是处理字符。

PS 如果您在某些时候想要使用单词 n-gram(如果您的句子通常写得很好),您可以使用TfidfVectorizer(analyzer='word').