使用字符串聚类列表

时间:2013-12-18 03:32:04

标签: python pandas nlp cluster-analysis

所以我的数据集目前如下所示:

['microsoft','bizspark'],
['microsoft'],
['microsoft', 'skype'],
['amazon', 's3'],
['amazon', 'zappos'],
['amazon'],

.... 等。

现在我喜欢做的是将这些相互关联,使用Levenstein距离来计算单词分数。

现在我将遍历所有列表并将距离与以下列表进行比较。

microsoft -> ['microsoft','bizspark'], ['microsoft'], ['microsoft', 'skype'],
amazon -> ['amazon', 's3'], ['amazon', 'zappos'], ['amazon'], ....

问题是如何做到这一点?我应该逐字逐句计算每个levenstein距离,即['amazon','zappos']和['microsoft','bizspark'],我首先得到对:(亚马逊,微软),(亚马逊,bizspark) ),(zappos,microsoft,(zappos,bizspark)并计算每对的距离。

或者我应该真的只是从这些创建字符串,然后计算距离?

我最终得到的是具有距离的NXN矩阵:

                            ['microsoft','bizspark'] | ['amazon', 'zappos'] ....
    ['microsoft','bizspark']           1             |          ?
    _-------------------------------------------------------------------------
    ['amazon', 'zappos']               ?             |          1
            ...
            ....

那么如何将聚类应用于此以确定截止阈值?

使用单个单词的一个这样的建议被讨论here

但我不确定如何处理单词列表!?

请注意,关于实现,我正在使用Python库,例如Numpy,Scipy,Pandas以及所需。

2 个答案:

答案 0 :(得分:0)

您所匹配的内容可能主要取决于您的目标。如果你想匹配任何一个单词,你可能应该分别匹配这两个单词。如果你想与短语匹配,那么'.join()'可能是一个好主意。

顺便说一下,我最近使用difflib.get_close_matches()做了一些模糊匹配。它位于Python标准库中。我对你可能使用的Levenstein距离库没有任何反对意见;我只想指出这个选项对我有用。

答案 1 :(得分:0)

也许“频繁项目集挖掘”比集群要求更多。

它会找到频繁的单词组合,这样每个文档可能是多个模式的一部分。