我有一个SQL Server 2012数据库,其中包含一个包含问题和答案的表。简化的结构是这样的:
question_id int
question varchar(500)
answer varchar(50)
我想在问答栏之间找到单词对或群集。我想知道是否有一种方法可以在SQL中执行此操作而不是R等。我在文档聚类上看到了很多东西,但我想知道从列级别的数据库本身开始的位置。
所以,例如,我想找到这个问题的答案:当问题栏包含单词X时,它在答案栏中与单词Y配对的频率是多少?
答案 0 :(得分:1)
对于这类问题,我建议您查看字数统计地图 - 缩减示例。
现在,一些SQL服务器允许您在其表上执行类似map-reduce的函数,然后可以合理地优化它。请注意, iterim数据仍然可以真正大,因此您可能需要A)使用巧妙的散列技术(想想布隆过滤器)以避免实现初始连接或者B)实际上可能会将数据加载到Hadoop集群中并在那里进行处理。 MapReduce能够将这个问题扩展到庞大的数据集(想想:所有维基百科)
无论哪种方式,我都不认为SQL会让你开心。 SQL中的字符串操作是痛苦。参见例如以下相关问题:
How do I split a string so I can access item x?
T-SQL: Opposite to string concatenation - how to split string into multiple records
首先需要实现标记化/拆分和词干,删除停用词,然后在问题和答案的标记上执行JOIN
,然后对所有问题执行此操作并计算最常见的对。