带有字符串的列表的聚类列表
Posted
技术标签:
【中文标题】带有字符串的列表的聚类列表【英文标题】:Clustering list of list with Strings 【发布时间】:2014-01-06 02:29:24 【问题描述】:所以我的数据集目前如下所示:
['microsoft','bizspark'],
['microsoft'],
['microsoft', 'skype'],
['amazon', 's3'],
['amazon', 'zappos'],
['amazon'],
.... 等等。
现在我想做的是将这些相互关联起来,使用 Levenstein 距离来计算单词分数。
现在我将遍历所有列表并将距离与以下列表进行比较。
microsoft -> ['microsoft','bizspark'], ['microsoft'], ['microsoft', 'skype'],
amazon -> ['amazon', 's3'], ['amazon', 'zappos'], ['amazon'], ....
问题是如何做到这一点?我应该逐字计算每个列文斯坦距离,即['amazon','zappos']和['microsoft','bizspark'],我首先会得到对:(amazon,microsoft),(amazon,bizspark ), (zappos, microsoft, (zappos, bizspark) 并计算每对的距离。
或者我真的应该从这些字符串中创建字符串然后计算距离吗?
然后我应该得到一个带有距离的 NXN 矩阵:
['microsoft','bizspark'] | ['amazon', 'zappos'] ....
['microsoft','bizspark'] 1 | ?
_-------------------------------------------------------------------------
['amazon', 'zappos'] ? | 1
...
....
那么我该如何应用聚类来确定截止阈值?
讨论了一个使用单个单词的建议here
但我不知道如何处理单词列表!?
请注意,关于实现,我使用 Python 库,例如 Numpy、Scipy、Pandas 并根据需要使用。
【问题讨论】:
这可能更适合 stats.stackexchange.com,直到您确定要实现的目标。 查看 jellyfish 库。它提供了其他距离度量,例如我个人认为更有用的 jaro-distance。 【参考方案1】:也许“频繁项集挖掘”比聚类更适合您。
它会找到频繁的单词组合,这样每个文档都可能是多个模式的一部分。
【讨论】:
我刚刚调查过这个。我不确定它会有所帮助,主要是因为单词可能拼写错误然后不匹配 - 没有更正方面。此外,上面显示的每一对实际上都有键,这基本上是需要维护的字符串,例如“Microsoft Bizspark London”。另外一点,对可能永远不会重复,我假设通过频繁项集挖掘,我会丢失可能发生一次的东西...... 试着在你的问题中更清楚what你想做什么。我会将稀有词对视为噪音,并丢弃它们。【参考方案2】:您的匹配对象可能主要取决于您的目标是什么。如果你想匹配任何一个词,你可能应该分别匹配这两个词。如果你想匹配短语,那么 ' '.join()' 可能是个好主意。
顺便说一句,我最近使用 difflib.get_close_matches() 做了一些模糊匹配。它在 Python 标准库中。对于您可能使用的任何 Levenstein 距离库,我没有任何反对意见;我只是想指出这个选项对我有用。
【讨论】:
我想主要原因之一是我自己理解莱文斯坦距离的工作原理,我必须真正掌握并理解你建议的那个的有效性和内部工作原理 - 但我会看看。我认为结合加权并尝试匹配两个单词以及字符串可能会很有趣->我想知道这是否会提供更多信息或使其失去清晰度 但是,如果我确实处理匹配每个单词,那么我不太确定如何匹配。当两个词相同时,我是否会创建对并立即聚类,例如上面的 microsoft ?以上是关于带有字符串的列表的聚类列表的主要内容,如果未能解决你的问题,请参考以下文章