13

私は現在、非常に大量のテキスト (1 つのファイルに最大 290 MB のプレーン テキスト) の操作を行っています。それを Mathematica 8 にインポートした後、現在、それを小文字の単語に分解するなどの操作を開始しているため、テキスト分析を開始できます。

問題は、これらのプロセスに時間がかかることです。これらの操作を Mathematica で監視する方法はありますか? 変数を操作する場合は、ProgressIndicator などを使用しましたが、これは異なります。ドキュメントと StackOverflow を検索しても、同様のものは見つかりませんでした。

以下では、Cases[ ] コマンドのプロセスを監視したいと思います。

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

4 に答える 4

10

一致するパターンに「カウンター」操作を挿入することでStringSplit、操作の進行状況を表示できます。Cases次のコードは一時的に 2 つのプログレス バーを表示します。1 つ目は によって処理されStringSplitた文字数を示し、2 つ目は によって処理された単語数を示します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[""]]

  ]

この手法の鍵は、両方のケースで使用されるパターンがワイルドカードと一致すること_です。ただし、そのワイルドカードは常に失敗する条件によって保護されていますが、副作用としてカウンターがインクリメントされるまではそうではありません。次に、「実際の」一致条件が代替として処理されます。

于 2011-10-18T13:59:47.987 に答える
4

Casesどのように機能するかはわかりませんListが、特に進行中に を構築している場合は、処理に時間がかかることListがあります。処理された式には不明な数の用語が存在するため、それが で発生している可能性がありCasesます。だから、少し違うことを試してみます: "" を に置き換えSequence[]ます。たとえば、これList

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

になる

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

だから、試してみてください

bigList /. "" -> Sequence[]

何もないところから大きなものを構築するわけではないので、より高速に動作するはずListです。

于 2011-10-18T03:20:17.430 に答える