特徴テキストデータ、中国語の単語と単語モデルのバッグの抽出
1.テキスト特徴抽出の使用CountVectorizer
#インポートツールCountVectorizer量的ツール のインポートCountVectorizer sklearn.feature_extraction.textから VECT = CountVectorizer() 使用して#のCountVectorizerフィッティングテキストデータ EN = [「クイックブラウン犬フォックスのは怠惰Aの上にジャンプ」] vect.fit(EN) #の印刷結果 印刷( 'ワード数:{}'形式(LEN(vect.vocabulary_))) プリント( 'ワード:{}'形式(vect.vocabulary_ ))
単語数:8 ワード:{ '':7、 '迅速'、6 '茶色' 0 'キツネ':2、 'ジャンプ':3」オーバー':5'怠惰':4' 犬「:1}
中国語テキスト#を使用して試験 CNを= [ '迅速キツネ「は、包括的なカラー怠惰な犬の上にジャンプ] #フィッティング中国語テキストデータ vect.fit(CN) #印刷結果 プリント(言葉の数:{} '.format(LEN(vect.vocabulary_))) プリント('ワード:. {}「形式(vect.vocabulary_ ))
単語数:1つの 単語:{「迅速な包括的な色のキツネは、のろまなイヌに飛びかかっ」:0}
2.中国語テキストの単語のための単語ツールを使用します
#インポート単語どもっ インポートjiebaの #の使用は、中国語テキストの単語の言葉をどもっ CN = jieba.cut(「速い茶色のキツネは、のろまなイヌに飛びかかっ」) #単語間の境界線としてスペースを使用して 、CN = [ '' .join(CN)] #印刷結果 プリント(CN)
[「速い茶色のキツネは、のろまなイヌに飛びかかっ」]
中国語テキストベクトルの#1 CountVectorizer使用 (CN)vect.fit #印刷結果 プリント( 'ワード数:{}'形式(LEN(vect.vocabulary_))。) 、印刷( 'ワード:{}'形式(VECT。 .vocabulary_))
ワード数:6 ワード:{ 'アジャイル':2 '茶':3 'フォックス':4 'スキップ':5 '':0、 '怠惰':1}
3.配列に言葉モデルのテキストデータの袋を使用してください
バッグ#は単語モデル定義 bag_of_words = vect.transform(CN) #印刷データワードを前記袋モデル プリント( 'バッグに特徴語:\ N {}'形式 (のrepr(bag_of_words)))
機能への言葉のバッグ: < '<クラスのnumpy.int64「>」タイプの1X6スパース行列 形式で6つの格納された圧縮スパース行の要素を持ちます。>
単語モデル式の#印刷濃度バッグ 印刷(「密度バッグワードを発現:\ N {}」形式 (bag_of_words.toarray()))
単語バッグ密度式: [111111]
#は、新しい中国語のテキストを入力します CN_1 = jieba.cut(「怠惰な怠惰な怠惰なキツネ劣る迅速キツネアジャイル、限り迅速ないキツネキツネ」) スペースで区切っ# CN2 = [「」.join(CN_1)] #を印刷結果の 印刷(CN2)
[「レイジーキツネ劣る迅速キツネアジャイル、ないよう迅速なキツネフォックス怠惰怠惰」]
#単語モデルの新しいバッグを作成 new_bag = vect.transform(CN2) #印刷結果 プリント(「機能への単語の袋:\ N- {}」形式(のrepr(new_bag))) プリント(「ワード密度表現バッグ:\ nは{}「形式( new_bag.toarray()))。
機能への単語の袋: < '<クラスのnumpy.int64「>」タイプの1X6疎行列 。エレメントと3は、圧縮フォーマットで格納されたスパース行> 密度表現バッグワード: [033040]
さらに、テキストデータの処理を最適化
1.単語のN-gramモデルバッグを向上
#単語モデルのNグラム袋の使用改善 それの単語を書く位 ジョーク= jieba.cut(「李暁見自転車夏利に乗る」) #挿入スペース ジョーク= [「」.join(ジョーク )] ベクター位 vect.fit(ジョーク) joke_feature = vect.transform(ジョーク) #印刷テキスト特徴データ プリント( '特徴語式:\ N {}'形式 (joke_feature.toarray()))
ここで、この文の表現 :[[11111]]
#スクランブルテキストだけ joke2 = jieba.cut( '参照夏李暁自転車乗り') #挿入スペース joke2 = [ '' .join(joke2)] #特徴抽出 joke2_feature = vect.transform (joke2) #特徴印刷テキスト 印刷( '特徴語式:\ N {}'形式 (joke2_feature.toarray()))
ここで、この文の表現 :[[11011]]
#CountVectorizerは、パラメータのngram変更 VECT = CountVectorizer(ngram_range =(2,2&)) #再テキストデータの特徴抽出 CV = vect.fit(ジョーク) joke_feature = cv.transform(冗談) #プリントの新しい結果 の印刷を( '辞書調整後のパラメータn-グラム: '形式(cv.get_feature_names())){}。 プリント('新機能の式:{}「形式(joke_feature.toarray( 。)))
パラメータを調整した後、Nグラム辞書:[「夏李自転車」、「ボブを参照してください」、「乗って夏李」、「ライドはリーを参照してください」] 式の新規な特徴:[[1111]]
#テキスト配列調整 joke2 = jieba.cutを( '夏李暁自転車乗り参照') #挿入スペースを joke2 = [ '' .join(joke2)] #テキストデータは、特徴抽出さ joke2_feature = vect.transform(joke2) プリント( '新機能の式:{}'形式(joke2_feature.toarray( )))。
新機能式:[[0000]]
- ngram_range CountVectorizerパラメータを調整した後、マシンはもはや2、そのnグラムモデルのテキスト特徴抽出が良い最適化したことと同じ意味と考えられていません
2. TF-IDFテキストデータ処理モデルを使用して
#表示ACLIMDBデータセットツリーのフォルダリスト !ツリーACLIMDB
ボリュームデータのフォルダパスリスト ボリュームシリアル番号06B1-81F6 D:\ JUPYTERNOTEBOOK \ ACLIMDB ├─test │├─neg │└─pos └─train ├─neg ├─pos └─unsup
#インポートツールCountVectorizer量的ツール のインポートCountVectorizer sklearn.feature_extraction.textから #インポートファイルの読み込みツール sklearn.datasetsからはインポートload_filesの #は、トレーニングデータセットを定義 train_set = load_files( 'aclImdb /鉄道')を X_train、y_train、= train_set.data、 train_set.target #トレーニングデータセットファイルの印刷枚数 の印刷(「トレーニングセットファイルの数:{}」形式(LEN(X_train))) #抽出評論家だけ印刷し 、印刷(「ランダムルック:」、X_train [ 22])
训练集文件数量:75000 随机抽一个看看:あなたはミッチェルとPetrilloはディーンとジェリー偽物であるという事実を乗り越える一度さて、あなたはこの映画よりも悪いを行うことができ、「B Charlitaプリンセスノナは素晴らしい目の保養、ルゴシあるとして。生産の$ 50Kコストのためにあなたが思うだろうより良い彼は与えられています材料、及び生産値は、(ボーカルを除く)は、特に音楽と彼のベストですん。文字の最終見え隠れはしているやじる。ティムによって書かライアン、じゃじゃ馬億万長者のおばあさんのマイナー後半チャーリー・チャンの映画で俳優、そして夫。すべてのすべてで、多くの後半ルゴシのcheapiesよりもずっといい。」
#載荷試験セット テスト= load_files( 'aclImdb /テスト/') X_test、android.permission.FACTORを= test.dataをtest.target #テストデータセットファイルの数を返し プリント(LEN(X_test))を
25000
#CountVectorizerはで設定し、トレーニングデータにフィット VECT = CountVectorizer()。フィット(X_train) ベクターに#テキストを X_train_vect = vect.transform(X_train) #ベクターに設定されたテストデータ X_test_vect = vect.transform(X_test) #を印刷前記のトレーニングセット番号 プリント(「サンプル前記トレーニングセットの数:{}」形式(LEN(vect.get_feature_names()))) #プリント最後の10前記トレーニングセット プリント(「最後の10前記トレーニングセット:{ 。}「形式(vect.get_feature_names() [ - 10:]))
前記サンプルのトレーニングセット番号:124255 最後に10トレーニングセット特徴:[「üvegtigris」、「UWE 」、「YOU」、「イスラム」、「大友」、「SEY」、「дом」、「книги」、」 カラーリング「」ロック「]
#インポート変換ツールTFIDF インポートTfidfTransformerのsklearn.feature_extraction.textから トレーニングセットとテストを使用して#変換がTFIDF設定ツール TFIDF = TfidfTransformer(smooth_idf =偽) tfidf.fit(X_train_vect) X_train_tfidf = tfidf.transform(X_train_vect) X_test_tfidf = tfidf.transform (X_test_vect) #機能は、印刷処理の前と後の比較 プリント( 'TFIDFを処理せずに機能:\ n'は、X_train_vect [:5:5] .toArray()) プリント(TFIDF機能の後「治療:\ nは」、X_train_tfidf [:5 ,: 5] .toarray())
治療TFIDF無し前記 [0万] [0万] [0万] [0万] [0万] 治療TFIDF機能の後: [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [ 0 0 0 0 0]
#インポートSVC線形分類モデル sklearn.svmインポートLinearSVCから 導入#クロス検証ツール sklearn.model_selectionインポートcross_val_scoreのから モデルスコアリングのクロスバリデーション使用# スコア= cross_val_score(LinearSVC()、X_train_vect、y_train、CV = 3) #1リトレインを線形SVCモデル CLF = LinearSVC()。フィット(X_train_tfidf、y_train) 新しいデータで#交差検定用 scores2 = cross_val_score(LinearSVC()、X_train_tfidf、y_train、CV = 3)# 印刷新しいスコア比較 TFを介してプリント(」 {:。3F} '形式(クロスバリデーションスコア-idfトレーニングセット処理 。scores.mean())) 処理後のテストセットTF-IDスコア印刷(':{:3F }「形式(CLF。 スコア(X_test_tfidf、y_test)))
トレーニングセットTF-IDF処理した交差検定スコアの後:0.660 テストセットTF-IDは、スコアを処理した後:0.144
3.テキストでストップワードを削除します
#インポートは停止シソーラスを構築して インポートENGLISH_STOP_WORDS sklearn.feature_extraction.textから #のストップワードの印刷枚数 :印刷(、LEN(ENGLISH_STOP_WORDS)「数の単語を無効」) #20と印刷を無効に単語の前に20 プリント( 'リスト20の前と後の20:\ n'は、リスト(ENGLISH_STOP_WORDS )[:20]、リスト(ENGLISH_STOP_WORDS)[ - 20:])
停用词个数:318 列出后20个和个20前: [ '関心'、 '一方'、 'その上に'、 '時'、 '泣き' 'できる' 'ない'、 'そして' '最初の'、 '6'、 '除く'、 '私たちの'、 '誰も'、 'その後'、 '行わ'、 'は'、 '任意の'、 'でも'、 'の後に'、 'そう'] [」見つかった『『非常』、『や』、『に見える』、『を介して』、『これら』、『された』、『事前』、『』の後ろに『』『』すべてとして『』」、』トップ見えました'なり'、 '国連'、 '10'、 'に'、 '自分自身'、 ''、 '維持']
#インポートTFIDFモデル sklearn.feature_extraction.textインポートTfidfVectorizerから #英語のストップワードの起動パラメータ TFIDF = TfidfVectorizer(smooth_idf = Falseを、STOP_WORDS = '辞書英語') #は、トレーニングデータセットにフィット tfidf.fit(X_train) #のトレーニングデータセットをベクターにテキスト X_train_tfidf = tfidf.transform(X_train) #クロスバリデーションスコア scores3 = cross_val_score(LinearSVC()、X_train_tfidf、y_train、CV = 3) clf.fit(X_train_tfidf、y_train) ベクターにセット#テストデータ = tfidf.transform X_test_tfidf(X_test) #印刷テストセットおよび交差検定スコアスコア プリント(「ストップワードがクロスバリデーション平均トレーニングセット後に除去される:{:} 3F」フォーマット(scores3.mean())) 印刷( 'ストップワードの除去テストセットモデルスコアの後:{:3F}「形式 (clf.score(X_test_tfidf、y_test)))
ストップワードにクロスバリデーショントレーニング平均を除去した後:0.723933 テストセットモデルスコア単語を削除した後に無効:0.150920
要約:
scikit学習において、TfidfTransformerであるTF-IDF法を用いて、2つのクラスがあり、それが形質転換から抽出CountVectorizerマトリクステキストを使用することを特徴とし、他方はTfidfVectorizer、それはCountVectorizer使用量は、同じですCountVectorizerとTfidfTransformerが一体に行われる作業に相当。
自然言語最も一般的に使用されるPythonのツールキット--NLTKの分野では。また、テキストラベルや他の機能を満たし、単語を達成することができる、また、幹を抽出し、削減を止めるために使用することができます。
あなたは、さらにモデリング(トピックモデル)と文書クラスタリング(文書クラスタリング)のトピックへの洞察力を開発する場合。
興味が理解できるならば、ほとんどの場合、深い学習の分野では、自然言語処理のために使用され、word2vecライブラリを付属しています。
記事は引用;「素人の言語Pythonの機械学習に」