У меня есть следующие два предложения:
- Я хочу домой.
- Я хотел бы уйти.
Моя цель состоит в том, чтобыколичественно определить сходство между двумя предложениями, используя ядро, предложенное в этой статье .Я извлекаю все тройки зависимостей для каждого предложения.Это наборы из 3 элементов, которые содержат все отношения между словами в предложении и выглядят как (хвост, отношение, голова) .
Чтобы вычислить сходство, мне нужно просмотреть все возможные комбинациитриплет по предложениям и добавьте конкретное число к показателю сходства, основываясь на том, сколько узлов соответствует и соответствует ли отношение.
Я попытался использовать списочные выражения внутри цикла for, так как полагал, что это будет более эффективно, чем другое вложенноецикл, но я получаю синтаксическую ошибку.Вот мой код:
sim = 0
theta = 2.5
for d1 in deps1:
[sim += theta for d2 in deps2 if ((d1[0]==d2[0] or d1[2]==d2[2]) and d1[1]==d2[1])]
[sim += 1 for d2 in deps2 if ((d1[0]==d2[0] or d1[2]==d2[2]) and d1[1]!=d2[1])]
Для справки, вот как выглядят deps1 и deps2 при печати:
[('I', 'nsubj', 'want'), ('want', 'ROOT', 'want'), ('to', 'aux', 'go'), ('go', 'xcomp', 'want'), ('home', 'advmod', 'go')]
[('I', 'nsubj', 'like'), ('would', 'aux', 'like'), ('like', 'ROOT', 'like'), ('to', 'aux', 'leave'), ('leave', 'xcomp', 'like')]
Вопросы:
- Какой правильный синтаксиссделать это с пониманием списка?
- Есть ли более эффективный способ, возможно, использовать numpy (?), чтобы сделать это вычисление?