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
通过将"计数器"操作注入到匹配的模式中,可以查看StringSplit和Cases操作的进度.以下代码暂时显示两个进度条:第一个显示处理的字符数,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)
该技术的关键是两种情况下使用的模式都与通配符匹配_.但是,该通配符由始终失败的条件保护 - 但直到它将计数器增加为副作用.然后处理"真实"匹配条件作为替代.
它取决于你的文本是什么样的,但你可以尝试将文本分成块并迭代它们.然后,您可以使用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的建议稍微多一点的时间.
| 归档时间: |
|
| 查看次数: |
260 次 |
| 最近记录: |