Python 使用TfidVectorier时出现奇怪的线条,可能是由于替换为'';?
我昨天在这里发布了一个预测情绪的文本线性回归模型,我想知道的是,在将文本小写、删除所有停止字/标点符号和数字后,我的一些文本功能上留下了奇怪的线条Python 使用TfidVectorier时出现奇怪的线条,可能是由于替换为'';?,python,scikit-learn,linear-regression,data-science,Python,Scikit Learn,Linear Regression,Data Science,我昨天在这里发布了一个预测情绪的文本线性回归模型,我想知道的是,在将文本小写、删除所有停止字/标点符号和数字后,我的一些文本功能上留下了奇怪的线条 ['_______', '__________', '__________ pros', '____________', '____________ pros', '_____________', '_____________ pros', 'aa', 'aa waist', 'ab', 'abdomen', 'ab
['_______',
'__________',
'__________ pros',
'____________',
'____________ pros',
'_____________',
'_____________ pros',
'aa',
'aa waist',
'ab',
'abdomen',
'ability',
'able',
'able button',
'able buy',
我想是因为我把标点符号和数字换成了空格?我还是不能完全肯定
另一个问题是,我如何为线性回归正确地构造它?我是否应该用一列句子的特征来表示每个句子,并将其输入网络?但是如果矩阵是稀疏的,我该如何处理呢
抱歉,刚刚了解了更多关于文本预处理的信息
以下是我的清洁步骤:让我们假设一句话是这样的:“这件可爱的铂金连衣裙是女性化的,非常合身,易于穿着,也很舒适!强烈推荐
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))
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
和管道
为其找到最佳值。请看一个例子。根据具体情况,可能会使用更健壮的实现。然而,这很可能会给您的模型带来更大的复杂性
字符串中的奇怪行是源文本中必须包含的下划线字符。在清理过程中没有清理它们,因为您使用了re.sub(r'[^\w\s]','',x)
从字符串中删除非单词字符和非空白。下划线是单词字符集('\w'
)的一部分,因此未清除它们
我还应该指出,您的大多数自定义清洁都不需要,因为TfidfVectorizer
应该能够为您处理此问题。例如,删除停止字,然后TfidfVectorizer
也尝试删除它们。从字符串中删除标点符号和数字也是如此TfidfVectorizer
接受一个token
参数,您可以向它传递一个正则表达式,以选择要保留在标记中的字符。如果您只希望字符串中包含字母字符,那么令牌参数的这个正则表达式应该足以为您处理清理:'[a-zA-Z]'
。同样,我在这里不使用'\w'
字符集,因为它包含下划线(和数字)
由于您已经在列车组上运行了
TfidfVectorizer
的fit_transform
方法,并且在测试组上运行了transform
方法,因此这些组中的样本应准备好进行培训/测试。它们不需要进一步处理。您可以分享一下清理字符串的方法吗?还有,你在提取哪些特征?@JamesMchugh我已经在文本中添加了上述步骤,我正在尝试提取可能代表好或坏情绪的特征。你是使用线性回归还是逻辑回归?对于情绪分析,分类器就足够了。我可能不正确,但我没有看到线性回归模型在这里的应用。