CountVectorizer详解示例

  • CountVectorizer可以将文本文档集合转换为token计数矩阵。(token可以理解成词)
  • 此实现通过使用scipy.sparse.csr_matrix产生了计数的稀疏表示。
  • 如果不提供一个先验字典,并且不使用进行某种特征选择的分析器,那么特征的数量将与通过分析数据得到的词汇表的大小一致。

首先定义一份语料
corpus = [
‘This is the first document.’,
‘This document is the second document.’,
‘And this is the third one.’,
‘Is this the first document?’,
]
print(“@一、未设置参数时的一些例子====================================================================”)
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)#学习语料库并返回文档-术语矩阵,词汇表按英文字母顺序排列
print(“@part1.1输出X相关,矩阵及向量——————————————————————-“)
print(X)#括号里的行为文档索引,括号里的列为词汇索引,最外边的列为特定文档中特定词汇的数量
print(X.toarray())#toarray将列表List中的元素转导出为object类型数组
print(X[1])#第1行文档
print(X[[0,3]])#前两行文档,只跟里面的数字个数有关,跟数字本身无关
print(X[(1,1)])#第一行文档在词汇表中排序为1的词汇的数量
print(type(X))

print(“@part1.2输出词汇表相关———————————————————————–“)
print(vectorizer.get_feature_names())#获取语料词汇表?为什么不是x呢,这里的vectorizer没有操作任何变量啊,为什么会有结果呢
document_index = vectorizer.vocabulary_.get(“is”)# 得到document词在词汇表所在的列的索引
print(document_index)
test = vectorizer.transform([“Something is completely new.”]).toarray()#将新的句子与现有的词汇表做匹配,生成新的句子向量,未出现的词将会设为0,不会加入到预料库中,生成的向量长度与词汇表大小长度相当
print(test)
print(“@二、设置参数后的一些例子====================================================================”)

二、设置参数后的一些例子

bigram_vectorizer = CountVectorizer(ngram_range=(1, 2),
stop_words=[‘isd’],
token_pattern=r”\b\w+\b”, min_df=1)

参数解释:

ngram_range()生成1个字、2个字(连续)组成的所有词汇表

stop_words为停用词列表

token_pattern根据正则表达式要保留的内容,token可以理解为有意义的需要保留的词汇

min_dif词频小于1不会纳入词典

print(“@part2.1输出词汇表、向量、稀疏矩阵———————————————————–“)
analyze = bigram_vectorizer.build_analyzer()#build_analyzer: 返回一个进行预处理和分词的调用对象,意思是生成一个分词结果列表
print(analyze(“Bi-grams are cool!”))#打印分词列表,所有的符号都会被视为分隔符

X_2 = bigram_vectorizer.fit_transform(corpus).toarray()#计算预料库,形成词汇表和文档向量#,因为包含2词组合的短语,因此构建的向量矩阵会变得更大
print(bigram_vectorizer.get_feature_names())#输出词汇列表
print(X_2)#打印稀疏矩阵形式的词典及数量
feature_index = bigram_vectorizer.vocabulary_.get(“is the”)#词汇表中 is this的在各语句中的索引
print(X_2[:, feature_index])#打印各文档是否含有feature_index所表示的词汇

print(“@part2.2相关函数及方法———————————————————————–“)
print(“————————–分割线2.2.1————————“)
analyzer = bigram_vectorizer.build_analyzer()#返回一个对输入文本分词的调用对象
print(analyzer(“This is a test.”))#将括号内句子进行分词

print(“————————–分割线2.2.2————————“)
preprocessor = bigram_vectorizer.build_preprocessor()#返回一个对输入文本进行预处理的对象
print(preprocessor(“This is a test.”))#对文本进行预处理,转换成小写字母

print(“————————–分割线2.2.3————————“)
tokenizer = bigram_vectorizer.build_tokenizer()#返回对输入语句进行分词的对象,只分一个词的,未输出应该2词短语
print(tokenizer(“This is a test.”))

print(“————————–分割线2.2.4————————“)
print(bigram_vectorizer.decode(“This is a test.这是一个测试。”))#将输入转换为unicode字符表示。解码策略使用vectorizer的参数

print(“————————–分割线2.2.5————————“)
raw_documents = [“This is a test”, “Is this a test?”]# raw_documents: 字符串、unicode或者file对象构成的可迭代对象
print(bigram_vectorizer.fit(raw_documents).vocabulary_)#fit(raw_documents, y=None): 从传入的raw_documents的所有词汇中学习出一个词汇字典,这个词汇字典是 {word: word在向量矩阵中的列索引,…},

print(“————————–分割线2.2.6————————“)
print(bigram_vectorizer.fit_transform(corpus).toarray())# 学习出一个词汇字典,并且返回一个行为文本,列为词汇的矩阵,# 这个函数等价于先调用fit函数,再调用transform函数。但是是更高效的实现。

print(“————————–分割线2.2.7————————“)
print(bigram_vectorizer.get_feature_names())# get_feature_names:返回一个特征名列表,特征的顺序是特征在矩阵中的顺序。

print(“————————–分割线2.2.8————————“)
print(bigram_vectorizer.get_params())# get_params: 返回估计器的参数,就是当初预先设定的参数

print(“————————–分割线2.2.9————————“)
print(bigram_vectorizer.get_stop_words())# get_stop_words: 返回停止词表

print(“————————–分割线2.2.10———————–“)
print(bigram_vectorizer.inverse_transform(bigram_vectorizer.fit_transform(corpus).toarray()))# inverse_transform(X): 返回每个文档中数量不是0的词语,返回的是array组成的list。len = n_samples

print(“————————–分割线2.2.11———————–“)
print(bigram_vectorizer.set_params(stop_words=[“is”]).get_stop_words())# set_params 设置估计器的参数,可以事后补充参数,

print(“————————–分割线2.2.12———————–“)
print(bigram_vectorizer.transform(corpus).toarray())#transform(raw_documents): 将文档转换成向量矩阵,#使用fit拟合的词汇表或提供给构造函数的词汇表提取原始文本文档中的词语计数。

Original: https://blog.csdn.net/fengshucui/article/details/117559826
Author: fengshucui
Title: CountVectorizer详解示例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/548309/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球