我目前正在对一个非常大的文本进行操作(在一个文件中大约有290MB的纯文本).进入Mathematica 8之后,我正在开始运作,把它分解成小写字,等等,所以我可以开始文本分析.
问题是这些过程需要很长时间.有没有办法通过数学来监控这些操作?对于具有变量的操作,我使用ProgressIndicator等.但是这是不同的.我搜索的文档和StackOverflow并没有变得类似.
在下面我想监视Cases []命令的进程:
input=Import["/users/USER/alltext.txt"]; wordList=Cases[StringSplit[ToLowerCase[input],Except[WordCharacter]],Except[""]];
解决方法
通过将“counter”操作注入到匹配的模式中,可以查看StringSplit和Cases操作的进度.以下代码暂时显示两个进度条:第一个显示由StringSplit处理的字符数,第二个显示由案例处理的字数:
input = ExampleData[{"Text","PrideAndPrejudice"}]; wordList = Module[{charCount = 0,wordCount = 0,allWords},PrintTemporary[ Row[ { "Characters: ",ProgressIndicator[Dynamic[charCount],{0,StringLength@input}] }]] ; allWords = StringSplit[ ToLowerCase[input],(_ /; (++charCount; False)) | Except[WordCharacter] ] ; PrintTemporary[ Row[ { "Words: ",ProgressIndicator[Dynamic[wordCount],Length@allWords}] }]] ; Cases[allWords,(_ /; (++wordCount; False)) | Except[""]] ]
该技术的关键是两种情况下使用的模式与通配符_匹配.然而,该通配符被总是失败的条件所守卫,但直到它增加了一个计数器作为副作用.然后处理“真实”匹配条件作为替代.