Python sklearn CountVectorizer 的分析器参数中如何识别“单词边界”?

Posted

技术标签:

【中文标题】Python sklearn CountVectorizer 的分析器参数中如何识别“单词边界”?【英文标题】:How are "word boundaries" identified in Python sklearn CountVectorizer's analyzer parameter? 【发布时间】:2019-12-28 01:02:16 【问题描述】:

Python sklearn CountVectorizer 有一个“analyzer”参数,其中有一个“char_wb”选项。根据定义,

"Option ‘char_wb’ creates character n-grams only from text inside word boundaries; n-grams at the edges of words are padded with space.". 

我的问题是,CountVectorizer 如何从字符串中识别“单词”?更具体地说,“单词”是简单地从句子中以空格分隔的字符串,还是通过更复杂的技术(例如来自 nltk 的 word_tokenize)来识别?

我问这个问题的原因是我正在分析社交媒体数据,其中包含大量@mentions 和#hashtags。现在,nltk 的 word_tokenize 将“@mention”分解为 [“@”、“mention]”,将“#hashtag”分解为 [“#”、“hashtag”]。如果我将这些输入到 ngram_range > 1 的 CountVectorizer 中,则“#”和“@”永远不会被捕获为特征。此外,我希望字符 n-gram(带有 char_wb)将“@m”和“#h”捕获为特征,如果 CountVectorizer 分解,这将永远不会发生@mentions 和 #hashtags 到 ["@","mentions"] 和 ["#","hashtags"]。

我该怎么办?

【问题讨论】:

【参考方案1】:

正如您在source code 中看到的那样,它通过空格分隔单词。

def _char_wb_ngrams(self, text_document):
    """Whitespace sensitive char-n-gram tokenization.
    Tokenize text_document into a sequence of character n-grams
    operating only inside word boundaries. n-grams at the edges
    of words are padded with space."""
    # normalize white spaces
    text_document = self._white_spaces.sub(" ", text_document)

    min_n, max_n = self.ngram_range
    ngrams = []

    # bind method outside of loop to reduce overhead
    ngrams_append = ngrams.append


    for w in text_document.split():
        w = ' ' + w + ' '
        w_len = len(w)
        for n in range(min_n, max_n + 1):
            offset = 0
            ngrams_append(w[offset:offset + n])
            while offset + n < w_len:
                offset += 1
                ngrams_append(w[offset:offset + n])
            if offset == 0:   # count a short word (w_len < n) only once
                break
    return ngrams

text_document.split() 按空格分割。

【讨论】:

啊。我明白了...谢谢!

以上是关于Python sklearn CountVectorizer 的分析器参数中如何识别“单词边界”?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn工具-python数据集操作API

python---sklearn---kmeans

Python数模笔记-Sklearn 介绍

python sklearn 机器学习sklearn.model_selection 介绍

python库之——sklearn

python 15 sklearn