我正在尝试将一个熊猫数据帧矢量化为单独的n-gram字符。但是有一个警告,我希望列名是字符序列的一部分。例如,假设这是原始数据:
First Name, Last Name
John, Smith我使用长度为3的字符n-gram。
我希望生成以下n-gram:
"First Name_Joh",
"First Name_ohn",
"Last Name_Smi",
"Last Name_mit",
"Last Name_ith"因此,我可以为该向量创建一个热编码。我希望列名是字符n元语法序列的一部分。对于我正在做的事情,我不希望所有的n-gram被混为一谈。(如果我使用的术语不正确,很抱歉;我不擅长解释此材料。)
^我知道如何使用循环来做这件事,但效率很低;但是我需要它具有可伸缩性和可重用性,所以我想使用sklearn的CountVectorizer来做这件事。我该怎么做呢?
发布于 2018-12-13 07:58:58
我不确定这是否是您想要的,但也许您可以将CountVectorizer与字符分析器一起使用,并迭代列以得到gram。
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
data = pd.DataFrame(
{
'first_name': ['John', 'Ed'],
'last_name': ['Smith', 'Bean']
}
)
vec = CountVectorizer(analyzer = 'char', ngram_range = (3, 3))
output = pd.DataFrame()
for i in data.columns:
pre = pd.DataFrame(vec.fit_transform(data[i]).toarray(), columns = [i + '_' + j for j in vec.get_feature_names()])
output = pd.concat([output, pre], axis = 1)
pd.concat([data, output], axis = 1)提供:

或者,您可能希望名称作为值?
output * output.columns提供:

https://stackoverflow.com/questions/53752893
复制相似问题