Scikit Learn - 使用CountVectorizer

时间:2016-08-02 08:19:13

标签: python machine-learning scikit-learn

我有字符串列表。如果任何字符串包含'#'字符,那么我想提取字符串的第一部分,并仅从字符串的这一部分获取字标记的频率计数。即 如果字符串是“stackoverflow上的第一个问题#” 预期的代币是“first”,“question”

如果字符串不包含'#',则返回整个字符串的标记。

要计算术语文档矩阵,我使用scikit中的CountVectorizer

在下面找到我的代码:

class MyTokenizer(object):
    def __call__(self,s):
        if(s.find('#')==-1):
            return s
        else:
            return s.split('#')[0]
    def FindKmeans():
        text = ["first ques # on stackoverflow", "please help"]
        vec = CountVectorizer(tokenizer=MyTokenizer(), analyzer = 'word')
        pos_vector = vec.fit_transform(text).toarray()
        print(vec.get_feature_names())`

output : [u' ', u'a', u'e', u'f', u'h', u'i', u'l', u'p', u'q', u'r', u's', u't', u'u']

Expected Output : [u'first', u'ques', u'please', u'help']

3 个答案:

答案 0 :(得分:2)

问题在于您的标记器,您已将字符串拆分为您想要保留的位以及您不想保留的位,但您还没有将字符串拆分为单词。 尝试使用下面的标记器

class MyTokenizer(object):
    def __call__(self,s):
        if(s.find('#')==-1):
            return s.split(' ')
        else:
            return s.split('#')[0].split(' ')

答案 1 :(得分:2)

您最多可以在分隔符(<select name="liste" class="wpcf7-form-control wpcf7-select wpcf7-validates-as-required" id="liste" aria-required="true" aria-invalid="false"> <option value="">---</option> <option value="Brannvern og dokumentasjon">Brannvern og dokumentasjon</option> <option value="Brannvarslingsanlegg">Brannvarslingsanlegg</option><option value="Røykvarslere">Røykvarslere</option> </select>)上拆分一次,然后进行拆分的第一部分。

#

答案 2 :(得分:0)

 s.split('#',1)[0] 

#是你的结果。你不需要检查&#34;#&#34;是否存在。