从数据框中提取文本特征
Extract text features from dataframe
我有带有两个文本字段的数据框和类似这种格式的其他功能:
message feature_1 feature_2 score text
'This is the text' 4 7 10 extra text
'This is more text' 3 2 8 and this is another text
现在我的目标是预测分数,在尝试将此数据帧转换为特征矩阵以将其输入我的机器学习模型时,这是我所做的:
# Create vectorizer for function to use
vectorizer = TfidfVectorizer()
# combine the numerical features with the TFIDF generated matrix
X = sp.sparse.hstack( (vectorizer.fit_transform(df.message),
df[['feature_1', 'feature_2']].values, vectorizer.fit_transform(df.text)),
format='csr')
现在打印我的 X 矩阵的形状时我得到 2x13,但是当我像这样检查 X_columsn 时:
X_columns = vectorizer.get_feature_names() + df[['feature_1', 'feature_2']].columns.tolist()
我没有得到语料库中的所有单词,它只给我 df.text
中存在的单词和 df.message
中没有单词的其他特征属性。
['and', 'another', 'extra', 'is', 'text', 'this', 'feature_1', 'feature_2']
如何让 X 包含我所有的数据框特征!!
作为一般规则,将矢量化器应用于整个文本语料库以计算词汇量,然后将所有文本转换为矢量。
您两次拟合矢量化器,因此第二次调用 fit_transform
会覆盖第一次并相应地更新词汇表。首先尝试在两个文本字段上进行拟合以计算整个语料库的词汇量,然后转换每个文本字段,如下所示:
from sklearn.feature_extraction.text import TfidfVectorizer
import scipy as sp
vectorizer = TfidfVectorizer()
vectorizer.fit(df.message.append(df.text))
X = sp.sparse.hstack( (vectorizer.transform(df.message),
df[['feature_1', 'feature_2']].values, vectorizer.transform(df.text)),
format='csr')
X_columns = vectorizer.get_feature_names() + df[['feature_1', 'feature_2']].columns.tolist()
这给了我:
X_columns
Out[51]: ['and', 'another', 'extra', 'is', 'more', 'text', 'the', 'this', 'feature_1', 'feature_2']
这就是你想要的吗?
我有带有两个文本字段的数据框和类似这种格式的其他功能:
message feature_1 feature_2 score text
'This is the text' 4 7 10 extra text
'This is more text' 3 2 8 and this is another text
现在我的目标是预测分数,在尝试将此数据帧转换为特征矩阵以将其输入我的机器学习模型时,这是我所做的:
# Create vectorizer for function to use
vectorizer = TfidfVectorizer()
# combine the numerical features with the TFIDF generated matrix
X = sp.sparse.hstack( (vectorizer.fit_transform(df.message),
df[['feature_1', 'feature_2']].values, vectorizer.fit_transform(df.text)),
format='csr')
现在打印我的 X 矩阵的形状时我得到 2x13,但是当我像这样检查 X_columsn 时:
X_columns = vectorizer.get_feature_names() + df[['feature_1', 'feature_2']].columns.tolist()
我没有得到语料库中的所有单词,它只给我 df.text
中存在的单词和 df.message
中没有单词的其他特征属性。
['and', 'another', 'extra', 'is', 'text', 'this', 'feature_1', 'feature_2']
如何让 X 包含我所有的数据框特征!!
作为一般规则,将矢量化器应用于整个文本语料库以计算词汇量,然后将所有文本转换为矢量。
您两次拟合矢量化器,因此第二次调用 fit_transform
会覆盖第一次并相应地更新词汇表。首先尝试在两个文本字段上进行拟合以计算整个语料库的词汇量,然后转换每个文本字段,如下所示:
from sklearn.feature_extraction.text import TfidfVectorizer
import scipy as sp
vectorizer = TfidfVectorizer()
vectorizer.fit(df.message.append(df.text))
X = sp.sparse.hstack( (vectorizer.transform(df.message),
df[['feature_1', 'feature_2']].values, vectorizer.transform(df.text)),
format='csr')
X_columns = vectorizer.get_feature_names() + df[['feature_1', 'feature_2']].columns.tolist()
这给了我:
X_columns
Out[51]: ['and', 'another', 'extra', 'is', 'more', 'text', 'the', 'this', 'feature_1', 'feature_2']
这就是你想要的吗?