我试图获取一个单词的1-gram、2-gram和3-gram后缀,并将它们用作模型中的特征。
例如,
word = "Apple" 1-gram后缀 = 'e' 2-gram后缀 = 'le' 3-gram后缀 = 'ple'
我已经使用了sklearn中的CountVectorizer
,并设置了ngram_range=(1,3)
,但这会返回所有n-gram。我只需要n-gram后缀。
我该如何做到这一点?
另外,我是NLP的新手,不知道如何将这些n-gram作为我的机器学习模型的特征。我怎样才能将这些“字符串”n-gram特征转换为某种数值表示,以便在我的模型中使用它们?
有人能帮帮我吗?
回答:
您可以定义一个自定义的analyzer
来定义如何从输入中获取特征。对于您的案例,使用一个简单的lambda函数来从单词中获取后缀就足够了:
from sklearn.feature_extraction.text import CountVectorizerword = ["Orange","Apple", "I"]n=3vect = CountVectorizer(analyzer=lambda x: (x[-i-1:] for i in range(0,min(n,len(x)))))mat = vect.fit_transform(word).todense()
现在,如果我们从结果的向量化矩阵构建一个数据框:
pd.DataFrame(mat, columns=vect.get_feature_names()) I e ge le nge ple0 0 1 1 0 1 01 0 1 0 1 0 12 1 0 0 0 0 0