python-使用nltk和scikit从文本中为标记云选择最相关的单词

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

我想从文本中获取最相关的单词,以便准备标记云

我使用了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_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))]
但它仍然不完美

我的问题是:

  • 如何过滤动词
  • 如何进行词干分析以消除同一单词的不同形式
  • 如何调用CountVectorier过滤掉两个字母的单词
  • 请注意:

  • 我对nltk很满意,但像“你应该试试nltk”这样的回答不是答案,请给我一个代码
  • 我不想使用贝叶斯分类器和其他需要训练模型的技术。我没有时间做这些,也没有示例来训练分类器
  • 语言是英语

  • 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对这项任务没有什么帮助。

    因为它在“请注意”部分?