print(tfidf.get_feature_names()[:1000])
时间: 2023-09-28 10:05:42 浏览: 107
这段代码是用来查看 `tfidf` 中的前1000个特征词的名称的。`tfidf` 是一个已经被转换成 TF-IDF 矩阵的稀疏矩阵,而 `get_feature_names()` 方法可以返回每一列(即每一个特征词)的名称。因此,`tfidf.get_feature_names()[:1000]` 就是返回前1000个特征词的名称列表。如果特征词数量不足1000,那么就返回全部的特征词名称列表。
相关问题
def mult_l(): text = [] data = pd.read_csv('D:/library/文本分类/train.csv', encoding='utf-8') tfidf = TfidfVectorizer(norm='l2', ngram_range=(1, 2)) features = tfidf.fit_transform(data.word) # print(tfidf.get_feature_names()) # print(features.toarray()) list_dir_test = os.listdir('D:/library/文本分类/test/') for t in list_dir_test: with open('D:/library/文本分类/test/'+t, 'r', encoding='utf-8') as f: format_sec = f.read() text.append(format_sec) features1 = tfidf.transform(text) clf = joblib.load( 'D:/library/fenci/MultinomialNB_classify.pkl') # 将模型存储在变量clf_load中 cat_id_df = data[['id', 'id_style']].drop_duplicates( ).sort_values('id_style').reset_index(drop=True) cat_to_id = dict(cat_id_df.values) id_to_cat = dict(cat_id_df[['id_style', 'id']].values) pred_cat_id = clf.predict(features1) # print(pred_cat_id) print('测试集文件:', 'D:/library/fenci/test_1/' + t, '预测类别:', id_to_cat[pred_cat_id[0]]) text.clear() if name == "main": mult_l()报错为ValueError: X has 326125 features, but MultinomialNB is expecting 59079 features as input.
这个错误是因为你在测试集上使用的特征向量(features1)的维度与训练集上使用的特征向量(features)的维度不同。在训练过程中,你使用了TfidfVectorizer来提取特征向量,但是在测试集上你又重新使用了TfidfVectorizer来提取特征向量,这导致了特征向量的维度不同。
解决方法是在测试集上使用与训练集相同的TfidfVectorizer来提取特征向量,可以在训练集上先拟合TfidfVectorizer,然后在测试集上使用拟合好的TfidfVectorizer来提取特征向量。可以像下面这样修改代码:
```
def mult_l():
text = []
data = pd.read_csv('D:/library/文本分类/train.csv', encoding='utf-8')
tfidf = TfidfVectorizer(norm='l2', ngram_range=(1, 2))
features = tfidf.fit_transform(data.word)
# print(tfidf.get_feature_names())
# print(features.toarray())
clf = joblib.load('D:/library/fenci/MultinomialNB_classify.pkl')
# 将模型存储在变量clf_load中
cat_id_df = data[['id', 'id_style']].drop_duplicates().sort_values('id_style').reset_index(drop=True)
cat_to_id = dict(cat_id_df.values)
id_to_cat = dict(cat_id_df[['id_style', 'id']].values)
list_dir_test = os.listdir('D:/library/文本分类/test/')
for t in list_dir_test:
with open('D:/library/文本分类/test/'+t, 'r', encoding='utf-8') as f:
format_sec = f.read()
text.append(format_sec)
features1 = tfidf.transform(text)
pred_cat_id = clf.predict(features1)
# print(pred_cat_id)
print('测试集文件:', 'D:/library/fenci/test_1/' + t, '预测类别:', id_to_cat[pred_cat_id[0]])
text.clear()
if __name__ == "__main__":
mult_l()
```
这样就可以避免特征向量维度不匹配的错误了。
import jieba from sklearn.feature_extraction.text import TfidfVectorizer import numpy as np import pandas as pd # 读取停用词文件 def read_stopwords(file_path): with open(file_path, 'r', encoding='gbk') as f: stopwords = [line.strip() for line in f] return set(stopwords) # 中文分词 def chinese_word_cut(text, stopwords): words = jieba.cut(text) result = [] for word in words: if word not in stopwords: result.append(word) return " ".join(result) # 读取CSV文件 weibo_data = pd.read_csv('E:\Python自然语言处理\data\weibo_Convid19.csv', sep='\t') df = weibo_data['text_raw'] # 获取停用词集合 stopwords = read_stopwords('E:\Python自然语言处理\data\stopword.txt') # 对每条微博进行分词和去停用词 corpus_list = df.apply(lambda x: chinese_word_cut(x, stopwords)) # 提取关键词 corpus = ' '.join(corpus_list) tfidf = TfidfVectorizer() tf_key = tfidf.fit_transform([corpus]) word = tfidf.get_feature_names() weight = tf_key.toarray()[0] w_sort = np.argsort(-weight) print('Top 20 keywords:') for i in range(20): print(word[w_sort[i]])结果含有表情包,怎么去除
可以使用正则表达式来去除文本中的表情包,例如:
```
import re
def remove_emoji(text):
emoji_pattern = re.compile("["
u"\U0001F600-\U0001F64F" # emoticons
u"\U0001F300-\U0001F5FF" # symbols & pictographs
u"\U0001F680-\U0001F6FF" # transport & map symbols
u"\U0001F1E0-\U0001F1FF" # flags (iOS)
"]+", flags=re.UNICODE)
return emoji_pattern.sub(r'', text)
# 在 chinese_word_cut 函数中调用 remove_emoji 函数
def chinese_word_cut(text, stopwords):
text = remove_emoji(text)
words = jieba.cut(text)
result = []
for word in words:
if word not in stopwords:
result.append(word)
return " ".join(result)
```
这样就可以在分词前去除文本中的表情包。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)