from jqdata import *import datetimeimport pandas as pd# 获取昨天的日期yesterday = (datetime.date.today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d')# 构建查询对象q = query(finance.CCTV_NEWS).filter( finance.CCTV_NEWS.day == yesterday)# 执行查询news = finance.run_query(q)# 查看前几行print(news.head())
随便选取一个本文数据进行分词处理:
import jiebaimport requests# 1. 提取第7条新闻正文(假设第3列是正文)text = news.iloc[7, 3]# 2. 清洗import retext = re.sub(r'\s+', '', text)text = re.sub(r'[^\u4e00-\u9fa5]', '', text)# 3. 分词words = jieba.lcut(text)# 4. 在线加载停用词表stopwords_url = 'https://raw.githubusercontent.com/goto456/stopwords/master/cn_stopwords.txt'stopwords = set(requests.get(stopwords_url).text.splitlines())# 5. 去停用词filtered_words = [w for w in words if w not in stopwords and len(w) > 1]# 6. 查看结果print(filtered_words)
大神用不上,新手看不懂。clean_text = ' '.join(filtered_words)# CountVectorizer 统计vect = CountVectorizer()X = vect.fit_transform([clean_text])# 读取文件内容with open('message.txt', encoding='utf-8') as f: text = f.read()# 用之前训练好的 vect 转向量vectors = vect.transform([text]) # 注意:一定要包成列表# 查看结果print(vectors.toarray())
这样过后,原始的新闻就被改成机器可以读懂的文本了。
from sklearn.feature_extraction.text import TfidfVectorizerwith open('message.txt', encoding='utf-8') as f: vect_tf = TfidfVectorizer().fit_transform([f.read()])print(vect_tf.toarray()[0][:10]) # 前10维TF-IDF值
【结果分析】从上述结果可以看到,与CountVectorizer不同的是,TfidfVectorizer 所进行的向量化结果并不是整数类型,而是浮点类型。
原因是CountVectorizer是使用次数来进行向量转化的,而TfidfVectorizer是基于词频与逆向文档频率的乘积来实现向量转化的,因此结果会有这样的差别。
注意:在文档个数不太多的情况下,使用CountVectorizer与TfidfVectorizer 进行向量转化,效果并没有太大区别。当文档个数较多时,推荐使用TfidfVectorizer 来进行操作。
如果需要量化软件的,可以看一下这两个
Copyright © 2024-2025 成都宁时科技有限公司 版权所有