NodeJSのNaturalライブラリを使用したロシア語テキストの分類

前文




現代人、特にプログラマーが毎日多くの情報を受け取っていると言っても、誰も驚かないでしょう。 たとえば、私のRSSクライアントは私に週に約500件の記事を発行します。 そして、もちろん、これは唯一の情報源ではありません。



NodeJSでトレーニングされた記事フィルターを使用してRSSクライアントを自分で作成することを考えました。 原則として、ノードの下には既製のRSSリーダーがあり、分類器を備えた既製のニューラルネットワークがあります。そのため、プロトタイプを作成するのは特に難しい作業ではないと思われました。



手に入れたニューラルネットワークをテストすることから始めることにしました。 私は少量の入力を取りました。 オタク雑誌のnodejsの記事からポジティブデータをコピーしました 「tape.ru」に否定的なデータが見つかりました。 分類子のタスクは、プログラミングとnodejsに関する記事を、私の開発にとって面白くない通常のニュースから分類することでした。



BrainFannとの共同作業の結果を表示したくありません。それらを判断するのに十分な専門知識がないと思います。 箱から出して完全に私に合っていなかったと言うだけです-私の入力では、彼らは十分な数の正解を与えませんでした。 しかし、 Naturalライブラリーは非常に印象的でした。



次に、分類器を訓練し、その作業を確認し、ロシア語を理解させた方法を示します。







入力データ




ここで分類器をトレーニングおよびテストしたデータを表示できます 。 記事にはそれらがたくさんあるので、ここから出ました。



コード




'use strict'; var data = require('./data'); var natural = require('natural'), porterStemmer = natural.PorterStemmerRu, classifier = new natural.BayesClassifier(porterStemmer); //  classifier'     . for (var i = 0; i < data.good.length; i++) { classifier.addDocument(data.good[i], 'good'); }; for (var i = 0; i < data.bad.length; i++) { classifier.addDocument(data.bad[i], 'bads'); }; //     . classifier.train(); //     . console.log('START CLASSIFICATION'); console.log('Test on good'); for (var i = 0; i < data.test_good.length; i++) { console.log("> ",classifier.classify(data.test_good[i])); }; console.log('Test on bad'); for (var i = 0; i < data.test_bad.length; i++) { console.log("> ",classifier.classify(data.test_bad[i])); };
      
      







結果




 分類を開始
良いテスト
 >良い
 >良い
 >良い
 >良い
不良テスト
 >バッド
 >バッド
 >バッド
 >バッド
 >良い
 >バッド
 >バッド
 >良い 




ロシア語のサポート




高品質の分類では、Naturalはテキストを単語の配列に分割し、不要な単語(いわゆるストップワード )を削除し、単語の末尾を切り捨てる「ステマー」コンポーネントを使用します。



プロジェクトではロシア語がサポートされていますが、デフォルトでは分類子はロシア語を無視します。 分類器にロシア語を理解させるには、分類器を初期化して、ロシア語の刺激器をその中に入れ、デフォルトの英語刺激器をこのように置き換える必要があります。 とても簡単です:



 var classifier = new natural.BayesClassifier(natural.PorterStemmerRu);
      
      







これで、ロシア語の特性を考慮して、分類子内のテキストが正しく処理されます。



実験愛好家




作業分類子を使用してリポジトリを特別に作成しました。 インストールは簡単です:



 git clone git@github.com:shuvalov-anton/classifier.git cd classifier npm i node app.js
      
      







次に、data.jsのデータを独自のデータに変更し、結果を確認します。



PS




正直なところ、情報を分類して結果を評価した経験はありませんが、Naturalの単純なユーザーとしての仕事の結果は本当に感銘を受けました。 残念ながら、githubにはreadme以外のプロジェクトのドキュメントは多かれ少なかれ見つかりませんでした。 ロシア語を含める方法を理解するために、ソースを調べなければなりませんでしたが、これには非常に複雑なものがあり、結果は価値があったと思います!



All Articles