我有一组50k值表示X.每个值我想要与一组10k值比较说Y.如果X出现在它匹配的字符串Y中的任何位置。
因此X中的每个值都要检查Y中的每个值,如果匹配则分配X.
完成此任务的最佳方法是什么。它是数据挖掘项目所必需的。
我将数据加载到MS Access数据库中。 然后使用vba程序 拿每个X.如果匹配则更新Y(例如'%X%')但它是一个永无止境的过程。列已编制索引但无效。
是否有任何算法或步骤将其简化为逐步过程并更快地完成映射?
如果除了下面给出的答案之外还有其他可用选项,请告知我们。我将更多地解释情景
Table1.Data
sentense1
sentense2
sentense3
sentense4
sentense5
sentense6
-
-
-
Sentense100k
Table2.Phrase(表示多个单词)
Phrase1
Phrase2
Phrase3
Phrase4
Phrase5
-
-
-
Phrase 100k
要检查Phrase1
是否有Sentense1 to Sentense100k
完全匹配的短语,短语匹配,Phrase1中的最大单词匹配等等,并根据最佳匹配创建地图(理想情况下)在句子中任何地方都可以使用的确切短语)
表3输出
Data Best Possible Phrase Second Best Phrase(Optional)
Sentense1 Phrase1000 Phrase50k
Sentense2 Phrase10 Phrase70k
请让我知道执行此操作的任何工具和逻辑。我在SQL中尝试的逻辑 1.
Select A.Data,B.Phrase from Table1 A left join Table2 B on A.Data Like '%' + B.Phrase + '%'
2
检查sentense中可用短语中的任何单词。所以用%word替换所有空格,如word1%word2%word3。然后查询为
A.Data Like '%' + B.Phrase + '%' which is
A.Data Like '%word1%word2%word3%'
但完成这么多数据的任务需要几天时间。
任何易于使用的工具,索引方法,查询都会有所帮助。下面给出的答案对我来说似乎太技术化了。请指导
答案 0 :(得分:1)
您可以在线性时间内构建后缀树(您可以在线查找后缀树),在X和Y中所有字符串的串联中,使用特殊的唯一符号结束每个字符串。
然后对于X中的每个字符串Xi,在后缀树(Xi的线性时间长度)中查找它,并将Xi分配给Y中的每个字符串,该字符串位于以Xi结尾的子树中的某个位置。
这是Xi指定给Y的字符串数的线性时间。
因此,您可以获得最佳的O(N + k)时间算法,其中: