以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] contains 判断运算速度慢  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=130903)

--  作者:machle
--  发布时间:2019/2/11 13:08:00
--  [求助] contains 判断运算速度慢
数据量比较大,想计算每一个value2中的词在每一个value1句子中出现的总次数。运算的时候,点了以后就不动,程序死掉了。

然后我就在每个循环中增加了一个messagebox,想看看是否计算正确,这样每次就蹦出计算结果来,发现是对的。问题出在那条contains语句,我该怎么调试。

谢谢!

For i = 0 To Tables("WordAndTimes").Rows.Count-1                  ‘3万条数据’
    sum(i) = 0
    For j = 0 To Tables("JournalInformation").Rows.Count-1        “3万条数据”
        If Value1(j).Contains(Value2(i)) Then
            sum(i) = sum(i) +1
        End If
    Next    
    Tables("WordAndTimes").Rows(i)("文件频率") = sum(i)/Tables("JournalInformation").Rows.Count    
    
    messagebox.show( Tables("WordAndTimes").Rows(i)("文件频率") )
       
Next


--  作者:有点甜
--  发布时间:2019/2/11 14:53:00
--  

 

请做一个具体的实例发上来测试,说明要做到的效果。

 


--  作者:machle
--  发布时间:2019/2/12 22:08:00
--  回复:(有点甜) 请做一个具体的实例发上来测...
3万多句话,将它们逐一分词,将它们总结出了3万个词,现在想看看这3万词中的每一个,分别在这3万多句话中的多少个句子里出现过。
--  作者:machle
--  发布时间:2019/2/12 22:10:00
--  回复:(有点甜) 请做一个具体的实例发上来测...
 循环里这个contains 计算速度非常慢。
If Value1(j).Contains(Value2(i)) Then
            sum(i) = sum(i) +1
 End If

--  作者:有点蓝
--  发布时间:2019/2/12 22:19:00
--  
包含的判断一向都不快,更何况在循环里。

这种建议直接使用SQL进行查询

--  作者:有点甜
--  发布时间:2019/2/13 9:51:00
--  

 

3万*3万=9亿 次,能不慢吗?

 

做个具体例子发上来测试,看是否可以优化。