よくあるのがテキストのベクトル化です。
基本的なものにBoW(Bag of words)というものがあります。以下、簡単なイメージとコードです。BoWはscikit-learnのCountVectorizerで簡単に実行できます。
python
1from sklearn.feature_extraction.text import CountVectorizer
2import pandas as pd
3
4text_df = pd.DataFrame({'text':[
5 '沖縄 福岡 広島',
6 'Go Python Java',
7 '西武 ソフトバンク 楽天',
8 '巨人 ヤクルト',
9 '西武',
10 '西武 ライオンズ ファン'
11 ]})
12
13cv = CountVectorizer()
14cv_vec = cv.fit_transform(text_df['text'])
15
16print(cv_vec.toarray())
17
18[out](結果)
19[[0 0 0 0 0 0 0 0 1 0 1 1 0]
20 [1 1 1 0 0 0 0 0 0 0 0 0 0]
21 [0 0 0 1 0 0 0 0 0 1 0 0 1]
22 [0 0 0 0 0 1 0 1 0 0 0 0 0]
23 [0 0 0 0 0 0 0 0 0 0 0 0 1]
24 [0 0 0 0 1 0 1 0 0 0 0 0 1]]
ベクトル化するモジュールはscipyのスパースマトリックス形式で返ってきます。なので結果が見たいときは上のように toarray()メソッドを使ってください。
また、長文に対しては上のBoWよりもTF-IDFがよく使われます。
TF-IDFはそれぞれ
TF(w, d): Term Frequencyの略。その文書dに含まれる単語tの数
IDF(w, d): Inverse Document Frequencyの略。その単語tのレア度みたいなもの。式で書くと
math
1\log \frac{文書の数}{単語????を含む文書の数}
となります。
python
1from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
2tfidf = TfidfVectorizer()
3tfidf_vec = tfidf.fit_transform(text_df['text'])
4
5#結果の確認
6col = tfidf.get_feature_names()
7pd.DataFrame(tfidf_vec.toarray(), columns=col)
8
9[out](結果)
10 go java python ソフトバンク ファン ヤクルト ライオンズ 巨人 広島 楽天 沖縄 福岡 西武
110 0.00000 0.00000 0.00000 0.000000 0.000000 0.000000 0.000000 0.000000 0.57735 0.000000 0.57735 0.57735 0.000000
121 0.57735 0.57735 0.57735 0.000000 0.000000 0.000000 0.000000 0.000000 0.00000 0.000000 0.00000 0.00000 0.000000
132 0.00000 0.00000 0.00000 0.635091 0.000000 0.000000 0.000000 0.000000 0.00000 0.635091 0.00000 0.00000 0.439681
143 0.00000 0.00000 0.00000 0.000000 0.000000 0.707107 0.000000 0.707107 0.00000 0.000000 0.00000 0.00000 0.000000
154 0.00000 0.00000 0.00000 0.000000 0.000000 0.000000 0.000000 0.000000 0.00000 0.000000 0.00000 0.00000 1.000000
165 0.00000 0.00000 0.00000 0.000000 0.635091 0.000000 0.635091 0.000000 0.00000 0.000000 0.00000 0.00000 0.439681
この他にも色々あるので、是非調べて見てください
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/05 12:35
2019/09/05 13:10
2019/09/05 13:21
2019/09/05 13:25
2019/09/05 13:38
2019/09/05 15:47
2019/09/08 04:09
2019/09/09 04:31 編集