1 回答
TA贡献1946条经验 获得超3个赞
这是一个快速修复。你做错了几件事:
混淆了描述索引和描述本身(通过 解决
enumerate()
)。bag_of_words
应该对每个单词进行更新,而不是附加。正在迭代错误的项目(应该是
word
,不是bag_of_words
)。
如果选择直观/常规的名称,则可以很容易地看出一些错误。一定要花一些时间在这上面。
代码:
from nltk.tokenize import RegexpTokenizer
# test3 = the main dataset
keyword = ['gmc', 'toyota', 'cadillac']
tokenizer = RegexpTokenizer('\w+|\$[\d\.]+|\S+')
for i, description in enumerate(test3['description']):
bag_of_words = tokenizer.tokenize(description.lower())
for word in bag_of_words:
if word in keyword:
test3.loc[i, 'manufacturer'] = word
输出:
test3
Out[31]:
manufacturer description
0 toyota toyota, 10 years old.
1 gmc gmc, Motor runs and drives good.
2 NaN Motor old, in pieces.
3 cadillac 2 owner 0 rust. Cadillac.
通过 RegexpTokenizer 进行 re.findall()
我个人认为nltk是一个需要导入、安装和部署的比较重的模块。如果只进行字符串分割,我建议使用re.findall来提取有效的单词模式。例如:
import re
# won't extract numbers, currency signs and apostrophes
re.findall(r"""[A-Za-z\-]+""", test3["description"][3])
# the output is much cleaner than before
Out[39]: ['owner', 'rust', 'Cadillac']
但这取决于用户根据整个任务的选择。
添加回答
举报