python - 如何仅使用 scikit-learn 消除停用词?
问题描述
我能够让代码吐出一个单词及其频率。但是,我只想使用 scikit-learn 来消除停用词。nltk 在我的工作场所不起作用。有人对如何消除停用词有任何建议吗?
import pandas as pd
df = pd.DataFrame(['my big dog', 'my lazy cat'])
df
0
0 my big dog
1 my lazy cat
value_list = [row[0] for row in df.itertuples(index=False, name=None)]
value_list
['my big dog', 'my lazy cat']
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
x_train = cv.fit_transform(value_list)
x_train
<2x5 sparse matrix of type '<class 'numpy.int64'>'
with 6 stored elements in Compressed Sparse Row format>
x_train.toarray()
array([[1, 0, 1, 0, 1],
[0, 1, 0, 1, 1]], dtype=int64)
cv.vocabulary_
{'my': 4, 'big': 0, 'dog': 2, 'lazy': 3, 'cat': 1}
x_train_sum = x_train.sum(axis=0)
x_train_sum
matrix([[1, 1, 1, 1, 2]], dtype=int64)
for word, col in cv.vocabulary_.items():
print('word:{:10s} | count:{:2d}'.format(word, x_train_sum[0, col]))
word:my | count: 2
word:big | count: 1
word:dog | count: 1
word:lazy | count: 1
word:cat | count: 1
with open('my-file.csv', 'w') as f:
for word, col in cv.vocabulary_.items():
f.write('{};{}\n'.format(word, x_train_sum[0, col]))
解决方案
您可以使用自定义的 stop_words 初始化您的 CountVectorizer。例如,添加my
和big
到 stop_words 将只留cat
dog
lazy
在词汇表中:
stop_words=['my', 'big']
cv = CountVectorizer(stop_words=stop_words)
x_train = cv.fit_transform(value_list)
x_train.toarray()
array([[0, 1, 0], [1, 0, 1]], dtype=int64)
cv.vocabulary_
{'cat': 0, 'dog': 1, 'lazy': 2}
推荐阅读
- php - 如何在 html5 中给出选定的选项?
- typescript - 泛型方法装饰器类型
- git - 单个设备中的多个 git 用户
- python - 如何使 Python 中的字符串解析变得不那么笨拙?
- c# - WIX 图标无法正常工作
- sql - 需要查询以选择带有作者姓名的特定评论
- url-parameters - 如何在 opencart 3.x 中向 url 添加优惠券代码和产品 ID?
- xcode - 找不到具有以下名称的广告网络适配器:com.google.DummyAdapter
- c# - 将指数形式的数字转换为十进制
- android - FirebaseRecyclerAdapter 触发两次