1 回答

TA貢獻1946條經(jīng)驗 獲得超3個贊
這是一個快速修復(fù)。你做錯了幾件事:
混淆了描述索引和描述本身(通過 解決
enumerate()
)。bag_of_words
應(yīng)該對每個單詞進行更新,而不是附加。正在迭代錯誤的項目(應(yīng)該是
word
,不是bag_of_words
)。
如果選擇直觀/常規(guī)的名稱,則可以很容易地看出一些錯誤。一定要花一些時間在這上面。
代碼:
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是一個需要導(dǎo)入、安裝和部署的比較重的模塊。如果只進行字符串分割,我建議使用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']
但這取決于用戶根據(jù)整個任務(wù)的選擇。
添加回答
舉報