2 回答

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
你有兩個(gè)錯(cuò)誤。首先,你有一個(gè)簡(jiǎn)單的錯(cuò)字,在這里:
for word1,word2 in labels:
ids.append([word_to_id [word1], word_to_id [word1]])
您在那里添加了word1 兩次id 。更正第二個(gè)word1以查找word2。
接下來,您不是在測(cè)試您之前是否見過某個(gè)單詞,因此'Kleiber'您首先為其指定 id 4,然后6在下一次迭代中覆蓋該條目。您需要提供唯一的單詞編號(hào),而不是所有單詞:
counter = 0
for word in vocabulary:
if word not in word_to_id:
word_to_id[word] = counter
counter += 1
或者,vocabulary如果您已經(jīng)列出了該詞,則您根本無法添加該詞。vocabulary順便說一下,您在這里真的不需要單獨(dú)的列表。一個(gè)單獨(dú)的循環(huán)不會(huì)給你買任何東西,所以以下也有效:
word_to_id = {}
counter = 0
for words in labels:
for word in words:
word_to_id [word] = counter
counter += 1
您可以通過使用defaultdict對(duì)象并itertools.count()提供默認(rèn)值來大大簡(jiǎn)化代碼:
from collections import defaultdict
from itertools import count
def words_to_ids(labels):
word_ids = defaultdict(count().__next__)
return [[word_ids[w1], word_ids[w2]] for w1, w2 in labels]
count()每次__next__調(diào)用該對(duì)象時(shí),該對(duì)象都會(huì)為您提供系列中的下一個(gè)整數(shù)值,并且defaultdict()每次您嘗試訪問字典中尚不存在的鍵時(shí)都會(huì)調(diào)用該值。它們一起確保每個(gè)唯一單詞的唯一 ID。
添加回答
舉報(bào)