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 关注
- 194 浏览
添加回答
举报