【开源python模块使用】sklearn feature_extraction.text 统计中文文档n-gram的出现次数

【使用场景】

有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

你可能感兴趣的:(sklearn,Python)