【使用场景】
有100+的专业文档,需要通过n-gram的方式统计出专业强相关的词汇
【主要方向】
sklearn feature_extraction.text的CountVectorizer类
【使用方式】
#coding=utf-8
from sklearn.feature_extraction.text import CountVectorizer
content = '詹姆斯转会湖人,考辛斯转会勇士,戴维斯可能转会湖人,但我觉得转会火箭也可能'
vectorizer = CounterVectorizer(input='content',\
encoding='utf-8',\
ngram_range=(2,5),\ #代表取2-gram,3-gram,...5-gram
analyzer='char') #因为中文没有空格分割,所以一个字就是一个token
X = vectorizer.fit_transform([content])
print(vectorizer.get_feature_names())
print(X)
以上是处理content(List of strings),我的目标是处理文档集合。看官方手册的input选项为“file”和“filename”时应该能完成这样的功能,我做了如下尝试,但是报错,如果有人知道哪里错了,麻烦留言,多谢
# 处理文件的尝试
vectorizer = CountVectorizer(input='file',\
encoding='utf-8', \
ngram_range=(2,5),\
analyzer='char')
with codecs.open(path, 'r', encoding='utf-8') as file:
X = vectorizer.fit_transform(file)
print(X)
报错如下:出错在fit_transform的函数调用
我暂时的做法是预先从文件中提取内容,存入list中,然后通过content的方式进行处理。
【注意】
1.如果想把出现次数少于K的n-gram过滤掉,不能使用min_df和max_df,因为这个选项代表的是在多少个文件中出现过,而不是这个n-gram的出现频次。
【参考材料】
sklearn官方手册:https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html#sklearn.feature_extraction.text.CountVectorizer.fit_transform
关于min_df的说明:https://stackoverflow.com/questions/27697766/understanding-min-df-and-max-df-in-scikit-countvectorizer