python-使用nltk和scikit从文本中为标记云选择最相关的单词
我想从文本中获取最相关的单词,以便准备标记云 我使用了scikit学习包中的CountVector:python-使用nltk和scikit从文本中为标记云选择最相关的单词,python,data-mining,nltk,text-mining,scikit-learn,Python,Data Mining,Nltk,Text Mining,Scikit Learn,我想从文本中获取最相关的单词,以便准备标记云 我使用了scikit学习包中的CountVector: cv = CountVectorizer(min_df=1, charset_error="ignore", stop_words="english", max_features=200) 这很好,因为它给了我单词和频率: counts = cv.fit_transform([text]).toarray().ravel() words = np.array(cv.get_featur
cv = CountVectorizer(min_df=1, charset_error="ignore",
stop_words="english", max_features=200)
这很好,因为它给了我单词和频率:
counts = cv.fit_transform([text]).toarray().ravel()
words = np.array(cv.get_feature_names())
我可以过滤掉不常用的单词:
words = words[counts > 1]
counts = counts[counts > 1]
除了文字,还有数字:
words = words[np.array(map(lambda x: x.isalpha(), words))]
counts = counts[np.array(map(lambda x: x.isalpha(), words))]
但它仍然不完美
我的问题是:
1-如何过滤动词 取决于要支持的语言。你需要一对好的句子+单词标记器和一个词性标记器。这三个组件通常使用机器学习模型实现(尽管使用基于规则的句子和单词标记器可以获得很好的结果)。如果您只想支持英语,您可以在nltk中找到经过预培训的模型,但我不是专家,您必须阅读文档和教程:) 一旦您知道如何将文本拆分为句子和单词,并识别和删除动词,您就可以将其包装为python函数,并将其传递给
countvectorier
构造函数,如下所示
2-如何执行词干分析以消除同一单词的不同形式
您必须将可调用的自定义tokenizer
python传递给CountVectorizer
构造函数,以同时处理令牌提取、词干分析和可选过滤。这一点在本节中进行了解释
对于词干本身,这取决于您想要支持的语言,但您可以从开始
有一个pull请求,使插入茎秆分析器更自然:
3-如何调用CountVectorizer过滤掉两个字母单词
您可以更改用于标记化的默认正则表达式:
>>> from sklearn.feature_extraction.text import CountVectorizer
>>> CountVectorizer().token_pattern
u'(?u)\\b\\w\\w+\\b'
>>> CountVectorizer(token_pattern=u'(?u)\\b\\w{3,}\\b').build_tokenizer()(
... 'a ab abc abcd abcde xxxxxxxxxxxxxxxxxxxxxx')
['abc', 'abcd', 'abcde', 'xxxxxxxxxxxxxxxxxxxxxx']
>>> CountVectorizer(token_pattern=u'(?u)\\b\\w{3,9}\\b').build_tokenizer()(
... 'a ab abc abcd abcde xxxxxxxxxxxxxxxxxxxxxx')
['abc', 'abcd', 'abcde']
但在您的情况下,您可能希望整体替换标记器。你仍然可以看一看
不过有一点值得注意:要构建标记云,直接使用nltk和python标准库中的collections.Counter
类可能要容易得多。sklearn对这项任务没有什么帮助。因为它在“请注意”部分?