基于sklearn进行文本向量化

sklearn中,计数向量化用CountVectorizer,tfidf向量化用TfidfVectorizer

import pickle
from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer


def test(vectorizer, word_bag, test_data):
    test_matrix = vectorizer.transform(test_data)
    print(test_matrix.shape)
    array = test_matrix.toarray()
    for rid in range(len(array)):
        print(test_data[rid], "\t", "".join(["(%s, %.5f)" % (word_bag[cid], array[rid][cid]) for cid in range(len(word_bag))]))


def vectorize():
    train_data = ["我 来到 北京 清华大学", "他 来到 了 网易 杭研 大厦", "小明 硕士 毕业 与 中国 科学院", "我 爱 北京 天安门"]
    # vectorizer = CountVectorizer()
    vectorizer = TfidfVectorizer(norm="l1")
    vectorizer.fit(train_data)
    # train_matrix = vectorizer.fit_transform(train_data)
    word_bag = vectorizer.get_feature_names()
    print("[word_bag] %s" % " ".join(word_bag))
    print("[vocabulary] %s" % json.dumps(vectorizer.vocabulary_, ensure_ascii=False))

    test(vectorizer, word_bag, test_data=train_data)
    test(vectorizer, word_bag, test_data=["小明 来到 北京 天安门"])

    file_name = "data/vectorizer.pkl"
    pickle.dump(vectorizer, open(file_name, "w"), protocol=1)

    tfidf_vectorizer = pickle.load(open(file_name, "r"))
    test(tfidf_vectorizer, word_bag, test_data=["小明 来到 北京 天安门"])
  • TfidfVectorizer初始化对象时可以指定归一化参数norm : 'l1', 'l2' or None, optional
  • Countvectorizer和TfidfVectorizer在分token的时候,默认把长度<2的字符丢弃,如果要保留,可以指定token_pattern参数
  • 默认由输入的文档决定词表,也可以指定vocabulary参数
vectorizer = CountVectorizer(token_pattern=r"\w+", vocabulary=all_features)  # 保留长度小于2的token

 

样例运行结果:

[word_bag] 中国 北京 大厦 天安门 小明 来到 杭研 毕业 清华大学 硕士 科学院 网易
[vocabulary] {"小明": 4, "网易": 11, "杭研": 6, "毕业": 7, "北京": 1, "清华大学": 8, "来到": 5, "大厦": 2, "硕士": 9, "中国": 0, "天安门": 3, "科学院": 10}
(4, 12)
我 来到 北京 清华大学     (中国, 0.00000)(北京, 0.30596)(大厦, 0.00000)(天安门, 0.00000)(小明, 0.00000)(来到, 0.30596)(杭研, 0.00000)(毕业, 0.00000)(清华大学, 0.38807)(硕士, 0.00000)(科学院, 0.00000)(网易, 0.00000)
他 来到 了 网易 杭研 大厦     (中国, 0.00000)(北京, 0.00000)(大厦, 0.26396)(天安门, 0.00000)(小明, 0.00000)(来到, 0.20811)(杭研, 0.26396)(毕业, 0.00000)(清华大学, 0.00000)(硕士, 0.00000)(科学院, 0.00000)(网易, 0.26396)
小明 硕士 毕业 与 中国 科学院     (中国, 0.20000)(北京, 0.00000)(大厦, 0.00000)(天安门, 0.00000)(小明, 0.20000)(来到, 0.00000)(杭研, 0.00000)(毕业, 0.20000)(清华大学, 0.00000)(硕士, 0.20000)(科学院, 0.20000)(网易, 0.00000)
我 爱 北京 天安门     (中国, 0.00000)(北京, 0.44084)(大厦, 0.00000)(天安门, 0.55916)(小明, 0.00000)(来到, 0.00000)(杭研, 0.00000)(毕业, 0.00000)(清华大学, 0.00000)(硕士, 0.00000)(科学院, 0.00000)(网易, 0.00000)
(1, 12)
小明 来到 北京 天安门     (中国, 0.00000)(北京, 0.22042)(大厦, 0.00000)(天安门, 0.27958)(小明, 0.27958)(来到, 0.22042)(杭研, 0.00000)(毕业, 0.00000)(清华大学, 0.00000)(硕士, 0.00000)(科学院, 0.00000)(网易, 0.00000)
save finished.
(1, 12)
小明 来到 北京 天安门     (中国, 0.00000)(北京, 0.22042)(大厦, 0.00000)(天安门, 0.27958)(小明, 0.27958)(来到, 0.22042)(杭研, 0.00000)(毕业, 0.00000)(清华大学, 0.00000)(硕士, 0.00000)(科学院, 0.00000)(网易, 0.00000)

 

参考:

sklearn.feature_extraction.text.TfidfVectorizer

利用Python进行文章特征提取(一)

https://blog.csdn.net/macanv/article/details/78523961

转载于:https://www.cnblogs.com/bymo/p/8670170.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值