我昨天在这里发布了一个预测情绪的文本线性回归模型,我想知道的是,在将文本小写,去掉所有的停止词/标点和数字之后,我的一些文本特征上留下了奇怪的线条
['_______',
'__________',
'__________ pros',
'____________',
'____________ pros',
'_____________',
'_____________ pros',
'aa',
'aa waist',
'ab',
'abdomen',
'ability',
'able',
'able button',
'able buy',
我想是因为我用空格代替了标点符号和数字?我还是不确定
另一个问题是如何为线性回归正确地构造这个?我应该用一列句子的特征来表示每个句子,并将其输入网络吗?但是如果矩阵是稀疏的,我该怎么处理呢
抱歉,只是学习了更多关于文本预处理的知识
以下是我的清洁步骤:假设一句话是这样的:“这件漂亮的铂金连衣裙很有女人味,很合身,也很容易穿,很舒服!”!强烈推荐
小写
所有句子['Sentence']=所有句子['Sentence'].map(lambda x:x.lower())
2.删除停止词
stop = stopwords.words('english')
AllSentences['Sentences_without_stopwords'] = AllSentences['Sentence'].apply(lambda x: ' '.join([word for word in x.split() if word not in (stop)]))
3.删除数字
AllSentences['Sentences_without_stopwords_punc'] = AllSentences['Sentences_without_stopwords'].apply(lambda x: re.sub(r'[^\w\s]', '',x))
AllSentences['Sentences_without_stopwords_punc'] = AllSentences['Sentences_without_stopwords_punc'].apply(lambda x: re.sub(r'\d+', '',x))
测试/列车分流,tfidvectorise
X_train, X_test, y_train, y_test = train_test_split(X, Y,
test_size=0.30, random_state=42)
vect_word = TfidfVectorizer(max_features=20000, lowercase=True,
analyzer='word',stop_words= 'english',ngram_range=(1,3),dtype=np.float32)
tr_vect = vect_word.fit_transform(X_train)
ts_vect = vect_word.transform(X_test)
这给了我上面的功能名称输出
我认为使用
TfidfVectorizer
是进行情绪分析初步尝试的好地方。为了避免特征向量中的稀疏性,您可能希望从较少的特征开始,然后根据模型的性能逐步增加。您可以在训练时将其设为超参数,并使用GridSearch
和Pipeline
为其找到最佳值。参见here的示例。根据具体情况,更健壮的实现可能会使用word embeddings。然而,这很可能会给您的模型带来更大的复杂性字符串中的奇怪行是源文本中必须包含的下划线字符。它们在清理过程中没有被清理,因为您使用
re.sub(r'[^\w\s]', '',x)
从字符串中删除了非单词字符和非空白。下划线是单词字符集('\w'
)的一部分,因此它们没有被清除我还应该指出,大多数定制的清洁都不需要,因为
TfidfVectorizer
应该能够为您处理这些。例如,删除停止词,然后TfidfVectorizer
也尝试删除它们。从字符串中删除标点和数字也是如此TfidfVectorizer
接受一个token
参数,您可以向它传递一个正则表达式来选择要保留在标记中的字符。如果您只需要字符串中的alpha字符,那么token参数的正则表达式应该足以为您处理清理:'[a-zA-Z]'
。同样,这里不使用'\w'
字符集,因为它包含下划线(和数字)由于您已经在训练集上运行了
fit_transform
的TfidfVectorizer
方法,并且在测试集上运行了transform
方法,因此这些集中的样本应该已经准备好进行训练/测试。它们不需要进一步处理相关问题 更多 >
编程相关推荐