对大量信息机构的案件监控过程[]

时间:2011-10-18 02:51:29

标签: text wolfram-mathematica monitoring mathematica-8

我目前正在对一大块文本进行操作(一个文件中有大约290MB的纯文本)。在将其导入Mathematica 8之后,我现在开始将其分解为小写单词等等,因此我可以开始进行文本分析。

问题是这些过程需要很长时间。有没有办法通过Mathematica监控这些操作?对于带变量的操作,我使用了ProgressIndicator等。但这是不同的。我对文档和StackOverflow的搜索没有发现类似的东西。

在下文中,我想监视Cases []命令的过程:

input=Import["/users/USER/alltext.txt"];
wordList=Cases[StringSplit[ToLowerCase[input],Except[WordCharacter]],Except[""]];

4 个答案:

答案 0 :(得分:11)

StringCases[ToLowerCase[input], WordCharacter..]这样的东西似乎要快一点。我可能会使用DeleteCases[expr, ""]代替Cases[expr, Except[""]]

答案 1 :(得分:10)

通过在匹配的模式中注入“计数器”操作,可以查看StringSplitCases操作的进度。以下代码暂时显示两个进度条:第一个显示由StringSplit处理的字符数,第二个显示由Cases处理的字数:

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], {0, Length@allWords}]
        }]]

  ; Cases[allWords, (_ /; (++wordCount; False)) | Except[""]]

  ]

该技术的关键是两种情况下使用的模式都与通配符_匹配。但是,该通配符由始终失败的条件保护 - 但直到它将计数器增加为副作用。然后处理“真实”匹配条件作为替代。

答案 2 :(得分:5)

这取决于你的文本是什么样的,但你可以尝试将文本拆分成块并迭代它们。然后,您可以使用Monitor监视迭代器以查看进度。例如,如果您的文本由换行符终止的文本行组成,则可以执行类似

的操作
Module[{list, t = 0},
 list = ReadList["/users/USER/alltext.txt", "String"];
 Monitor[wordlist = 
   Flatten@Table[
     StringCases[ToLowerCase[list[[t]]], WordCharacter ..], 
      {t, Length[list]}], 
  Labeled[ProgressIndicator[t/Length[list]], N@t/Length[list], Right]];
 Print["Ready"]] 

在大约3 MB的文件上,这比Joshua的建议只花了不少时间。

答案 3 :(得分:4)

我不知道Cases的工作原理,但List处理可能非常耗时,尤其是当它正在构建List时。由于处理过的表达式中存在未知数量的术语,因此Cases可能会发生这种情况。所以,我会尝试稍微不同的东西:用Sequence[]替换“”。例如,这个List

{"5", "6", "7", Sequence[]}

变为

{"5", "6", "7"}.

所以,试试

bigList /. "" -> Sequence[]

它应该运行得更快,因为它不会从零开始构建一个大的List