1

我有一个巨大的数据库表,由音乐流派组成。大约有 35000 条记录,其中大部分主要表达相同的流派,例如:

+-----------+ 
| Name      |
+-----------+
| "Dubstep" |
| Dub Step  |
| Dubstep   |
| dub-step  |
| dubstep   |
+-----------+

都可以归结为一种独特的流派,我们可以简单地称之为“dubstep”。

所以我想实现一个更干净的数据集,但我想听听一些建议,我怎么知道“dub step”和“dubstep”是否表达相同的意思?

请注意,我使用的是 Python 和 SQLAlchemy。我绝不是一个非常 SQL 专家。

4

1 回答 1

1

您可以尝试通过小写所有内容来规范化 therms,然后将非字母数字字符去除为空格、破折号等。这将解决一些(如果不是大部分)差异,同时产生最少的误报。

另一个单独或与第一个结合使用的选项是使用 Levenshtein Distance http://en.wikipedia.org/wiki/Levenshtein_distance,并以最小距离对单词进行分组。

请注意:您应该首先通过查看使用第一个解决方案将清理多少案例来了解实际上“大多数情况”有多少,然后尝试逐渐将它们过滤掉,直到您遇到最可能的少数情况并且可以需要人工辅助。

为了实际实现这一点,我将在 sqlite 数据库中传输所有内容,然后在 python 中编写(或试验)一个排序规则函数并应用它。示例:http ://docs.python.org/2/library/sqlite3.html搜索 create_collat​​ion。

于 2013-06-11T17:11:01.947 回答