以下内容皆为原创,制作实属不易,请点点关注和赞赞❥(^_^)
第一关:机器学习概念和流程 | http://t.csdnimg.cn/IuHh4 |
第二关:数据集的使用 | http://t.csdnimg.cn/2jsdi |
第三关:特征工程-字典特征提取 | http://t.csdnimg.cn/ZpMto |
第四关:特征工程-文本特征提取 | http://t.csdnimg.cn/HSGhz |
这一关,我们学习stop_words的用法和中文分词和特征提取。
一.停用词stop_words
这个参数是CountVectorizer里面的参数,所谓停用词,就是不想看见的词。为什么不想看见?说明没有意义呗。有意义的我肯定想看啊。接下来看有无参数之前和之后的代码。
from sklearn.feature_extraction.text import CountVectorizer
def count_chinese_demo():
#中文文本数据
data = ['我 喜欢 你', '你 喜欢 我吗']
# 实例化转换器类
transfer = CountVectorizer()
data_new = transfer.fit_transform(data)
print("data_new\n", data_new)
print("feature_name\n", transfer.get_feature_names_out())
if __name__ == "__main__":
count_chinese_demo()
嗯嗯,有眼睛的可以看出来这个特征名字是“喜欢”、“我吗”。那我就感觉第二个词不是什么重要的特征,那我就用停用词stop_words。好,那我们继续看加了停用词的效果。
transfer = CountVectorizer(stop_words=["我吗"])
OK,家人们。这就看不见那个“我吗”这个特征词。
二.对中文jieba分词
先给大家一个分词的官方解释地址:jieba · PyPI
好吧,这翻译过来有点那个,解霸!!其实我第一次看见jieba,还看错了。
简单来说,jieba库可以中文句子的主语、谓语、动词啥的都准确的分割出来,非常的牛掰,那我们接下来看看jieba库的效果。
1.jieba库的效果展示
没安装jieba库的,pip install jieba就可以了,很快的,几秒就可以了。
import jieba
data = "真正的勇气是一种精神的力量,人格的力量,智慧的力量。"
print(jieba.lcut(data))
嗯嗯,可以看出来,jieba库还是有点东西的,有实力。
这次我们做个小改动,将分割好的元素传给列表,然后再用空格分割在一起,所以不需要我们一个一个去按空格了。还记得我们上次说,要是进行中文特征提取,中文是一个句子,返回的特征值就是整个句子,但是我们按好空格后(人为分词),返回的特征值就是一个个词。但是效率太慢了,所以这就是我们要使用jieba库的原因,提高了效率。
from sklearn.feature_extraction.text import CountVectorizer
import jieba
def cut_words(text):
text = " ".join(list(jieba.lcut(text)))
print(text)
if __name__ == "__main__":
cut_words("真正的勇气是一种精神的力量,人格的力量,智慧的力量。")
2.对中文数据进行分词和特征提取
from sklearn.feature_extraction.text import CountVectorizer
import jieba
data = ["真正的勇气是一种精神的力量,人格的力量,智慧的力量。",
"拥有了这种力量,我们就能独自越过困难堆成的高山;",
"拥有这种力量,我们就能克服生活的磨难;拥有了这种力量,我们就能成为命运的主宰,始终扬起胜利的风帆。"]
# 定义空列表放置分词好后的元素。
data_new = []
for sent in data:
# 使用jieba.cut后,将生成器转换为列表
data_new.append(list(jieba.cut(sent)))
# 实例化一个转换器类
transfer = CountVectorizer()
# 调用fit_transform
data_final = transfer.fit_transform(data_new)
# 输出结果
print("data_new\n", data_final.toarray())
print("feature_name\n", transfer.get_feature_names_out())
我嘞个豆,怎么报错了,我真服了。好在还有其他方案。
from sklearn.feature_extraction.text import CountVectorizer
import jieba
# 定义数据
data = ["真正的勇气是一种精神的力量,人格的力量,智慧的力量。",
"拥有了这种力量,我们就能独自越过困难堆成的高山;",
"拥有这种力量,我们就能克服生活的磨难;拥有了这种力量,我们就能成为命运的主宰,始终扬起胜利的风帆。"]
# 实例化一个转换器类,使用jieba进行分词
# tokenizer 应该是一个函数,该函数接受一个字符串并返回一个单词列表。
# analyzer: 这是 CountVectorizer 的一个参数,用于指定如何分析文本。analyzer 可以有三个选项:
#'char': 将文本分割为字符。
# 'char_wb': 将文本分割为字符,但考虑单词边界。
# 'word': 将文本分割为单词,这是默认选项。
transfer = CountVectorizer(analyzer='word', tokenizer=jieba.cut)
# 调用fit_transform
data_final = transfer.fit_transform(data)
# 输出结果
print("data_new\n", data_final.toarray())
print("feature names\n", transfer.get_feature_names_out())
这个效果不是太好啊,因为里面还包括标点符号。所以我们还要用stop_words=【】。
transfer = CountVectorizer(analyzer='word', tokenizer=jieba.cut, stop_words=[",","。",";" ])
虽然麻烦了一点,但是还是解决了,你说是不是。当然现在只是还没找到解决办法,等找到解决办法,我再跟大家分享。
今天主要跟大家分享了stop_words的用法和用sklearn结合jieba库对中文数据进行特征提取
感谢大家的观看,祝愿大家的生活顺顺利利,生活不止工作,陪陪自己的家人。大家拜拜~