# n-gram
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
import jieba
data = ["他用报话机向上级呼喊:“为了祖国,为了胜利,向我开炮!向我开炮!",
"记者:你怎么会说出那番话?",
"韦昌进:我只是觉得,对准我自己打,才有可能把上了我哨位的这些敌人打死,或者打下去。"]
data = [" ".join(jieba.lcut(e)) for e in data] # 分词,并用" "连接
vec = CountVectorizer(min_df=1, ngram_range=(1,2))
# ngram_range=(1,1) 表示 unigram, ngram_range=(2,2) 表示 bigram, ngram_range=(3,3) 表示 thirgram
X = vec.fit_transform(data) # transform text to metrix
vec.get_feature_names() # get features
[u’\u4e0a\u7ea7’, u’\u4e0a\u7ea7 \u547c\u558a’, u’\u4e0b\u53bb’, u’\u4e3a\u4e86’, u’\u4e3a\u4e86 \u7956\u56fd’, u’\u4e3a\u4e86 \u80dc\u5229’, u’\u53ea\u662f’, u’\u53ea\u662f \u89c9\u5f97’, u’\u53ef\u80fd’, u’\u53ef\u80fd \u54e8\u4f4d’, u’\u547c\u558a’, u’\u547c\u558a \u4e3a\u4e86’, u’\u54e8\u4f4d’, u’\u54e8\u4f4d \u8fd9\u4e9b’, u’\u5bf9\u51c6’, u’\u5bf9\u51c6 \u81ea\u5df1’, u’\u5f00\u70ae’, u’\u5f00\u70ae \u5f00\u70ae’, u’\u600e\u4e48’, u’\u600e\u4e48 \u8bf4\u51fa’, u’\u6216\u8005’, u’\u6216\u8005 \u4e0b\u53bb’, u’\u6253\u6b7b’, u’\u6253\u6b7b \u6216\u8005’, u’\u62a5\u8bdd\u673a’, u’\u62a5\u8bdd\u673a \u4e0a\u7ea7’, u’\u654c\u4eba’, u’\u654c\u4eba \u6253\u6b7b’, u’\u756a\u8bdd’, u’\u7956\u56fd’, u’\u7956\u56fd \u4e3a\u4e86’, u’\u80dc\u5229’, u’\u80dc\u5229 \u5f00\u70ae’, u’\u81ea\u5df1’, u’\u81ea\u5df1 \u53ef\u80fd’, u’\u89c9\u5f97’, u’\u89c9\u5f97 \u5bf9\u51c6’, u’\u8bb0\u8005’, u’\u8bb0\u8005 \u600e\u4e48’, u’\u8bf4\u51fa’, u’\u8bf4\u51fa \u756a\u8bdd’, u’\u8fd9\u4e9b’, u’\u8fd9\u4e9b \u654c\u4eba’, u’\u97e6\u660c\u8fdb’, u’\u97e6\u660c\u8fdb \u53ea\u662f’]
X.toarray()
array([[1, 1, 0, 2, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1]])
df = pd.DataFrame(X.toarray(), columns=vec.get_feature_names()) # to DataFrame
df.head()
上级 | 上级 呼喊 | 下去 | 为了 | 为了 祖国 | 为了 胜利 | 只是 | 只是 觉得 | 可能 | 可能 哨位 | … | 觉得 | 觉得 对准 | 记者 | 记者 怎么 | 说出 | 说出 番话 | 这些 | 这些 敌人 | 韦昌进 | 韦昌进 只是 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 0 | 2 | 1 | 1 | 0 | 0 | 0 | 0 | … | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | … | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | … | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
3 rows × 45 columns