如何将重量因子添加到CountDectorizer中



我是数据科学的新手。我正在尝试使用LDA解决NLP聚类问题。我使用 sklearn CountVectorizer遇到了问题。

我有一个数据框架:

df = pd.DataFrame({'id':[1,2,3],'word':[['one', 'two', 'four'],
                                    ['five', 'six', 'nine'], 
                                    ['eight', 'eleven', 'ten']]})
df2 =  df.copy().assign(word = df.word.map(lambda y: " ".join(y)))

    id  word
0   1   one two four
1   2   five six nine
2   3   eight eleven ten

我有一个来自Web的代码,这对我的问题有用:

cvectorizer = CountVectorizer(min_df=4, max_features=10000,ngram_range=(1,2))
cvz = cvectorizer.fit_transform(df2['word'])

我想要的只是在Word列中的值中添加某种权重因子。它应该像这样工作:Word列中数组的第一个元素应具有len(lengths of an array)的重量,并且从数组的开始到结束时以降序为单位。

例如:对于具有ID = 1的行,我想要以下情况:

{one:3, two:2, four:1}

其中int值是我的权重参数。

之后,我希望将加权值推入CountVectorizer

我已经阅读了文档,但我只是无法解决我的问题。

这里的基本函数是 split()方法 - 从中,您既可以将单词列表变成字符串列表,还可以将要分配给每个字符串的整数。

最终答案:这是一个插入字典制作方法,而apply()调用可以应用它:

def make_dict(list1,list2):
    d = {}
    for k,v in zip(list1,list2):
        d[k] = v
    return d
df2['word'].apply(lambda x : (x.split(" "), [i for i in reversed(range(1,len(x.split(" "))+1))])).apply(lambda y : make_dict(y[0],y[1])) 

这将返回一个系列,系列的每个元素都是您要求该特定行的字典。此表达的解释如下。

说明:以一个将创建元组的列表理解开始 - 元组的第一项是字符串的拆分列表,这将是您的字典键。元组的第二个项目是将成为字典值的整数的拆分列表(这些基本上只是呼叫对range()生成的反向列表,其参数来自答案开始时提到的字符串拆分方法)<)

In [1]: df2['word'].apply(lambda x : (x.split(" "), [i for i in reversed(range(1,len(x.split(" "))+1))]))
Out[1]:
0        ([one, two, four], [3, 2, 1])
1       ([five, six, nine], [3, 2, 1])
2    ([eight, eleven, ten], [3, 2, 1])

接下来,定义一个将两个列表作为参数的函数(从上面的操作中,我们知道这两个列表必须是相同长度的列表,因此我们不需要执行检查它们的长度相同,除非我们是偏执的),并将它们缝合到字典中:

In [2]: def make_dict(list1,list2):
    ...:     d = {}
    ...:     for k,v in zip(list1,list2):
    ...:         d[k] = v
    ...:     return d

list1变成了一组密钥,List2变成了一组值。(请注意,如果重复键,例如,如果您的一列是"一个")。

现在剩下的就是将第一个表达式的输出与上面定义的函数相结合,我们可以使用另一个apply()

来完成。
In [3]: df2['word'].apply(lambda x : (x.split(" "), [i for i in reversed(range(1,len(x.split(" "))+1))])).apply(lambda y : make_dict(y[0],y[1]))
Out[3]:
0        {'one': 3, 'two': 2, 'four': 1}
1       {'five': 3, 'six': 2, 'nine': 1}
2    {'eight': 3, 'eleven': 2, 'ten': 1}
Name: word, dtype: object

相关内容

  • 没有找到相关文章

最新更新