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

pro*_*ian 13 monitoring text wolfram-mathematica mathematica-8

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

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

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

input=Import["/users/USER/alltext.txt"];
wordList=Cases[StringSplit[ToLowerCase[input],Except[WordCharacter]],Except[""]];
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 11

StringCases[ToLowerCase[input], WordCharacter..]似乎有点像快一点.我可能会用DeleteCases[expr, ""]而不是Cases[expr, Except[""]].


WRe*_*ach 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[""]]

  ]
Run Code Online (Sandbox Code Playgroud)

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


Hei*_*ike 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"]] 
Run Code Online (Sandbox Code Playgroud)

在大约3 MB的文件上,这只花了比Joshua的建议稍微多一点的时间.