テキストファイルまたはテキストファイルのセットに関する基本的な統計を表示するために、一連の単純なコマンドラインツールを記述します。いくつかの基本的な統計には...
また、能力を追加することにも取り組みます...
Project GutenbergからMoby Dickのテキスト全体をダウンロードし、文字頻度のヒストグラムを印刷するプログラムのスクリーンショットです。
「T」という文字は、Moby Dickのすべての文字の9.25%を占めていることがわかります。
始めるには、そうする必要があります...
npm install実行して、必要なパッケージをインストールします。textalyze.jsは、このプロジェクトのソースコードですsample_data 、主にProject Gutenbergからの分析するサンプルテキストファイルを含むディレクトリです。このリポジトリに付属のtextalyze.jsファイルには、開始に役立つように設計されたコメントが記載されています。プログラムを読みやすくするために、自由に削除する必要があります。
ただし、それを機能させるために答える必要がある質問について考えてみてください。
これらの質問は、Nitty-Gritty Rubyからユーザーエクスペリエンスまで色域を実行し、Webの仕組みに慣れる道を歩み始めました。
コードに関するフィードバックをリクエストするには、標準のGitHubフロープロセスを使用します。
このプロジェクトは、一連の反復として構成されており、それぞれが以前の反復に基づいています。反復は3つの重要な役割を果たします。
ハードコーディングされた例を使用して、任意の任意のおよび場合によっては複製されたアイテムを含むArrayを入力として取得し、アイテム/カウントペアを含むObjectを返す関数を書き込みます。いくつか書きました
この反復には、あなたのために書かれたテストがあります。走る
npm test失敗したテストを確認します。最初にnpm installを実行することを忘れないでください!
つまり、入力に100のエントリがあり、そのうち20が文字「a」である場合、結果のObjectが含まれる必要があります。
{ 'a' : 20 } 「Sensible」は定義するのがあなた次第ですが、ここに提案された形式があり["a", "a", "a", "b", "b", "c"]として入力を強調したふりをしています。
user@host project-js-textalyze $ node textalyze.js
The counts for ["a", "a", "a", "b", "b", "c"] are...
a 3
b 2
c 1
user@host project-js-textalyze $
ハードコーディングされた例を使用して、任意のStringを入力として使用し、スペースや句読点を含む文字列内のすべての文字のArrayを返す関数を書き込みます。
これを以前の反復から配列カウント関数に送り込み、文字/カウントペアを含むObjectを取得します。これらのペアを賢明な方法で印刷します。
ファイルlib/sanitize.jsを作成し、内部のsanitizeと呼ばれる関数を定義します。 lib/itemCounts.jsのように、最後の行はあるはずです
module . exports = sanitize sanitize関数は、おそらくスペース、句読点、ラインブレークなどを含む任意のStringを取得し、すべての上部ケースの文字を低ケースの同等物に置き換える「サニタイズされた」文字列を返します。これにより、テキストを分析する際に、文字'A'と'a' 2つの異なる文字として扱われないようになります。後の反復で句読点やその他のビットを処理します。
このように機能するはずです
sanitize ( 'This is a sentence.' ) // => 'this is a sentence.'
sanitize ( 'WHY AM I YELLING?' ) // => 'why am i yelling?'
sanitize ( 'HEY: ThIs Is hArD tO rEaD!' ) // => 'hey: this is hard to read!'私たちにとって幸運なことに、JavaScriptには、String.Prototype.TolowerCaseに役立つ機能が組み込まれています。
この関数を現在のプログラムに統合して、結果のObjectに、例えば、
{ 'a' : 25 }の代わりに
{ 'a' : 19 , 'A' : 6 } 多くの場合、必要なデータは、分析が容易になる形式ではありません。フォーマットが不十分なデータを取得し、それを利用できるものに変換するプロセスは、データの消毒と呼ばれます。
「消毒」と見なされるものは、基礎となるデータと私たちのニーズによって異なります。たとえば、HTMLドキュメントのすべてのテキストを見たい場合は、すべてのHTMLタグをカウントしたくありません。逆に、HTMLドキュメントで最も一般的に使用されるタグに関するレポートが必要な場合は、タグを保持し、テキストを削除したいと思います。
私たちの場合、私たちはプログラムを設計しました。これにより、上級文字と低ケースの文字を明確な文字として扱うように設計しましたObject
{ 'a' : 20 , 'A' : 5 }しかし、私たちはおそらくむしろそれが含まれているだけです
{ 'a' : 25 }同様に、おそらく句読点(期間、コンマ、ハイフン、コロンなど)については気にしませんが、これは上級文字と小文字の違いよりも対処するのが難しいです。
ベースリポジトリには、少数のテキストファイルを含むsample_dataというディレクトリが含まれています。これらのファイルのいずれかの名前をプログラムにハードコードし、そのファイルの内容を文字列に読み取ります。その文字列を現在のプログラムに渡して、以前の反復で持っていたハードコーディングされた文字列の代わりに、その特定のファイルの文字範囲統計を印刷するようになります。
ファイルの内容を文字列に読み取るには、fs.readfileおよびfs.readfilesyncを参照してください。
データを読んでいるファイルを変更する必要があるたびに、JavaScriptコードを編集したくありません。プログラムを実行しているユーザーが、読み取るファイルの名前で渡すことができるように、変更してみましょう。これは、コマンドライン引数を使用して行います。
この反復は、プログラムのv1.0をマークします。現状では、私たちのプログラムは、限られていますが、他の人にそれを与えることができ、JavaScriptコードを編集する方法を知らずに使用できるように使用できます。
おめでとう!
ターミナルから次のコマンドを実行してください。
node some-program.js first_argument second_argument banana
コマンドラインの引数は、 first_argument 、 second_argument 、およびbananaであり、各引数間の分離を示すスペースがあります。 first_argumentは最初のコマンドライン引数であり、 banana 3番目のコマンドライン引数です。
ハードコーディングされた例を使用して、任意の、場合によっては複製されたエントリを入力として含むArrayを採用し、アイテム/周波数ペアを含むObjectを返す関数を書き込みます。これらのペアを賢明な方法で印刷します。
つまり、入力に100のエントリがあり、そのうち20が文字「a」である場合、その後、返されたObject持っている必要があります
{ 'a' : 0.20 } 既にArrayを取得し、エントリ/カウントペアを含むObjectを返す関数を作成しました。全体の周波数を計算するために、これらのカウント(一方)が必要です。自分自身を伸ばしたい場合は、「統計をカウントする」機能を利用する方法で「頻度統計」関数を書いてみてください。そうすれば、プログラムで多くのコードを複製したり、作業したりする必要はありません。
これは「ストレッチアプローチ」です。つまり、このようにプログラムを作成する必要は絶対にありません。私たちが言ってきたように、「より良い」、「より速い」、「よりエレガント」など、アプローチなどを困惑させながら立ち往生するよりも、何かを書いてフィードバックを得る方がはるかに良いです。
次のような文字周波数のヒストグラムを印刷します。
目標は、有用で適切に設計された出力を作成することです。上記の出力と同じように見える必要はありません。
ヒント:ヒストグラムの長さをスケーリングする方法として、各アイテムの周波数を使用できます。
追加する可能性のある追加機能は次のとおりです。
リクエストモジュールをインストールして使用して、URLとファイル名を渡すためのサポートを追加します。たとえば、 Moby Dickを最初にダウンロードする必要があるのではなく、実行できます
node textalyze.js http://www.gutenberg.org/cache/epub/2701/pg2701.txt文字の頻度だけでなく、5つの(またはN )最も一般的な単語を表示するためのサポートを追加します。
CSVファイルのように、Excelにロードできる形式でデータをエクスポートするためのサポートを追加します。これを行うには、CSVライターモジュールをインストールして使用できます。
複数の言語からテキストを見つけ、言語間の文字頻度を比較します。言語の文字の頻度は一種の指紋として機能し、文字の頻度を知ると言語を識別するのに必要なテキストがどれほど少ないかに驚くでしょう。
AnyChartのようなチャートライブラリを使用して、グラフィカルヒストグラムをエクスポートします。
モジュールをインストールするには、次のコマンドを実行します( nameOfModule目的のモジュールの名前に置き換えます):
npm install --save nameOfModuleこれにより、 package.jsonを更新し、依存関係としてモジュールを追加します。各モジュールのドキュメントを読んで、それをrequireて使用する方法を確認してください。