python - 为分类分解文本特征
问题描述
我有一个数据框, df 由文本和数字特征组成,类似于下图所示。
Feature 1 Feature 2 Feature 3 Feature 4 Label
10 20 keyword Human 1
2 3 Keywords Dog 0
8 2 Stackoverflow cat 0
目前我使用函数将文本特征转换为数字特征factorize
,然后使用新的数据框进行分类。
df[' Feature 3'] = df[' Feature 3'].factorize()[0]
df[' Feature 4'] = df[' Feature 4'].factorize()[0]
运行上面的代码后,我的数据框看起来像这样
Feature 1 Feature 2 Feature 3 Feature 4 Label
10 20 0 0 1
2 3 1 1 0
8 2 2 2 0
该factorize
功能将“关键字”和“关键字”读取为不同的单词,那么是否有任何功能可以将类似于“关键字”和“关键字”的单词读取为相同的单词?
输出数据框实际上应该如下所示
Feature 1 Feature 2 Feature 3 Feature 4 Label
10 20 0 0 1
2 3 0 1 0
8 2 1 2 0
解决方案
你可能想看看词干分析器。
NLTK 在这里给出了如何使用它们的例子,但简而言之,词干分析器将单词缩减到它们的词干,例如......
from nltk.stem.porter import *
stemmer = PorterStemmer()
words = ['jog', 'jogging', 'jogged']
[stemmer.stem(word) for word in words]
返回:
['jog', 'jog', 'jog']
或为你
words = ['keyword', 'keywords']
[stemmer.stem(word) for word in words]
返回:
['keyword', 'keyword']
编辑:
我应该指出,这些词不需要相似才能起作用:
words = ['drinking', 'running', 'walking', 'walked']
输出:
['drink', 'run', 'walk', 'walk']