n-gram python实现(基于sklearn)

# 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

猜你喜欢

转载自blog.csdn.net/Sinsa110/article/details/76855428
今日推荐