# 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

本文介绍了一种基于n-gram的文本特征提取方法,并通过具体实例展示了如何使用Python的sklearn库进行文本向量化。文章包括了中文文本的分词处理、特征向量的生成及展示。
229





