文本向量化技术

词袋法

使用sklearn提供的CountVectorizer类,样例如下:

def corpus4sklearn():
    return ["i am chinese", "i am in Hubei"]

def bow_extracter(corpus):
    # ngram_range是说可以把几个词连起来视作一个特征,bow一般就是一个词一个特征,否则特征数会爆炸
    vectorizer = CountVectorizer(stop_words=None, ngram_range=(1, 1), analyzer="word")
    return do_extracter(vectorizer, corpus)


def do_extracter(vectorizer, corpus):
    mat = vectorizer.fit_transform(corpus)
    print("feature num:%d" % mat.shape[1])
    print("vocab:%s" % vectorizer.vocabulary_)
    return
### 文本向量化方法 为了使计算机能够理解并处理文本数据,通常会采用多种方式将其转换成数值型特征向量。常见的文本向量化技术有词袋模型(Bag of Words)、TF-IDF加权方案以及基于分布式表示的方法如Word2Vec或GloVe。 #### 词袋模型 (BoW) 这是一种最简单的文本向量化形式,在该模型下,文档被视作单词集合而忽略了语法和顺序信息。具体来说就是统计每篇文档中各个词语出现次数作为特征值构建矩阵[^1]。 ```python from sklearn.feature_extraction.text import CountVectorizer corpus = [ 'This is the first document.', 'This document is the second document.' ] vectorizer = CountVectorizer() X = vectorizer.fit_transform(corpus) print(vectorizer.get_feature_names_out()) print(X.toarray()) ``` #### TF-IDF 加权 相比于单纯的词频计数,TF-IDF不仅考虑了某个词汇在单个文件内的频率还加入了逆文档频率因子来衡量这个词在整个语料库的重要性程度。这种方法可以有效减少那些频繁出现在大多数样本里却缺乏区分度的通用词汇的影响[^2]。 ```python from sklearn.feature_extraction.text import TfidfVectorizer tfidf_vectorizer = TfidfVectorizer() Tfidf_matrix = tfidf_vectorizer.fit_transform(corpus) print(tfidf_vectorizer.get_feature_names_out()) print(Tfidf_matrix.toarray()) ``` ### KMeans 聚类结合应用实例 完成上述任意向量化操作之后就可以利用得到的结果来进行KMeans聚类分析了。下面给出一个完整的例子展示如何通过TF-IDF向量化后的文本执行KMeans聚类: ```python import numpy as np from sklearn.cluster import KMeans from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer def load_data(): categories = ['alt.atheism', 'talk.religion.misc'] newsgroups_train = fetch_20newsgroups(subset='train', categories=categories, shuffle=True, random_state=42) return newsgroups_train.data[:50] data = load_data() # 向量化 vectorizer = TfidfVectorizer(stop_words="english", max_features=1000) vectors = vectorizer.fit_transform(data) # 执行KMeans聚类 true_k = 2 model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1) model.fit(vectors) order_centroids = model.cluster_centers_.argsort()[:, ::-1] terms = vectorizer.get_feature_names_out() for i in range(true_k): print(f"Cluster {i}:") top_terms = [terms[ind] for ind in order_centroids[i, :10]] print(' '.join(top_terms)) ``` 此代码片段展示了加载新闻组数据集的一部分,并对其进行预处理、向量化再实施KMeans聚类的过程。最终输出每个簇中最具有代表性的十个关键词以便于观察不同类别之间的差异性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值