使用 sklearn 计数向量化器获取 n gram 后缀

Pra*_*rla 3 python nlp machine-learning n-gram scikit-learn

我正在尝试为一个单词获取 1、2、3 克后缀,并将它们用作我模型中的特征。

例子,

word = "Apple"
 1 gram suffix = 'e'
 2 gram suffix = 'le'
 3 gram suffix = 'ple'
Run Code Online (Sandbox Code Playgroud)

CountVectorizer在 sklearn 中使用过,ngram_range=(1,3)但这给出了所有的 n 克。我只需要 n gram 后缀。

我怎样才能做到这一点?

另外,我是 NLP 的新手,不知道如何在我的 ML 模型中使用这些 n 克作为特征。如何将这些“字符串”n-gram 特征转换为某种数字表示,以便我可以在我的模型中使用它们。

有人可以帮我吗?

yat*_*atu 5

你可以定义一个自定义analyzer来定义如何从输入中获取特征。对于您的情况,从单词中获取后缀的简单 lambda 函数就足够了:

from sklearn.feature_extraction.text import CountVectorizer

word = ["Orange","Apple", "I"]
n=3
vect = CountVectorizer(analyzer=lambda x: (x[-i-1:] for i in range(0,min(n,len(x)))))
mat = vect.fit_transform(word).todense()
Run Code Online (Sandbox Code Playgroud)

现在,如果我们从结果向量化矩阵构建一个数据帧:

pd.DataFrame(mat, columns=vect.get_feature_names())

   I  e  ge  le  nge  ple
0  0  1   1   0    1    0
1  0  1   0   1    0    1
2  1  0   0   0    0    0
Run Code Online (Sandbox Code Playgroud)