私は、HTMLからテキストを抽出し、文や単語などの言語単位を抽出するブラウザベースの(Javascript and jQuery)言語分析ツールを作成しています。WebWorkersを使用して非常に長いページの単語頻度を計算できますか?
テキストをインポートするために、PHPバックエンドは特定のURLをスパイダーし、結果のHTMLをサニタイズします。ソースHTMLページが非常に長い場合、私はいくつかの困難に遭遇してきた
:そのHTMLは、インターフェイスにdiv#container
にこのようなものを挿入されています。そのようなページを読んでインターフェイスのDOM
に挿入しても問題は発生しないようです(ただし、しばらく時間がかかります)。
しかし、ページが長くなると、spideredコンテンツ上で単語頻度アルゴリズムを実行するのが非常に遅くなります。ページが100Kワードに近づくと、物事はかなり停止することになります。
だから、私はいくつかのオプションを参照してください。それはソースドキュメントを切り捨てるか、複数のドキュメント
- 変更PHPのクモを変更する単語頻度アルゴリズム、それは正確なあまりだように、単語の分布を完全に記録するのではなく、サンプルを抽出します。
- この新しいファンワルドWebワーカーのことを試して、複数のバックグラウンドプロセスに計算を分散できるかどうかを試してみてください。
(3)は、Webワーカーが行うように設計されたものです。私はspideredコンテンツをチャンクに分割し、各チャンクに1つのWebワーカーを割り当てることを想像しています。各チャンクの単語頻度プロファイルは、Webワーカーから返され、合計されてグラフに表示されます。
私がこれを試みる前に、以前はWeb Workersで働いていたかもしれない他の人々から健全性チェックを受けることができたと思っていました。 1つ目は、div#container
の内容を効率的に分割することが問題になるのではないかと疑問に思っています.DOMツリーを通した何らかのトラバーサルがdiv#container
の下にあると思います。
ゲイリーありがとう、私はこのアプローチを試して、それがどうなるか見てみましょう。私はここに返信します... ここでは、「callee」の使用が不思議です。 –
はい、そうです。 'setTimeout(function wrap(){;});'を外側の 'setTimeout'呼び出しで使用し、' 'arguments.callee'の代わりに' 'wrap'を呼び出すだけでいつでも名前付き関数を使用することができます。 –