3 回答

TA貢獻1825條經驗 獲得超6個贊
首先,這里不清楚你如何定義關系。如果你的“貓”有同義詞:[“貓”,“小貓”,“鼠標”],這是否意味著“鼠標”有一個同義詞“貓”。
根據我的理解,答案是否定的。所以這是python中的解決方案:
G = {
"cat": ["feline", "kitten", "mouser"],
"kitten": ["kitty", "kit"],
"kit": ["pack", "bag", "gear"],
"computer": ["electronics", "PC", "abacus"]
}
def areWordsRelated(G, w1, w2):
if w1 == w2:
return True
frontier = [w1]
checked = set()
while len(frontier):
el = frontier.pop()
if el in G:
neighbors = G[el]
for i in neighbors:
if i == w2:
return True
if i not in checked:
frontier.append(i)
checked.add(i)
return False
areWordsRelated(G, "cat", "pack") #true
areWordsRelated(G, "cat", "computer") #false
那么我們在這里做什么呢?起初你有你的圖表,它只是字典(地圖),它顯示了你的關系(我基本上拿了你的切片)。
我們的算法像模具一樣增長,維護一組檢查元素和當前邊界。如果 frontier 是空的(沒有什么可探索的,那么元素沒有連接)。我們一次從邊界中提取一個元素并檢查所有鄰居。如果它們中的任何一個是我們正在尋找的元素 - 那么就存在聯系。否則檢查我們是否已經看到了這樣的元素(如果沒有,則將其添加到邊界和已檢查的集合中)。
請注意,如果您的關系以稍微不同的方式運作,您需要的只是修改圖表。
最后一句話,如果您正在尋找一種正常的方法來查找同義詞,請查看word to vector 算法和python 中的一個很好的實現。這將允許您找到真正復雜的關系,即使是在沒有指定這種關系的情況下,California也Golden Gate可以找到相關的詞。
- 3 回答
- 0 關注
- 216 瀏覽
添加回答
舉報