У меня есть список кортежей. Каждый кортеж состоит из строки и слова. Теперь каждый диктант в этом состоит из списка кортежей. Размер списка составляет около 8 000 записей.
Пример данных:
dataset = [('made of iron oxide', {'entities': [(12, 16, 'PRODUCT'), (17, 20, 'PRODUCT'), (15, 24, 'PRODUCT'), (12, 19, 'PRODUCT')]}),('made of ferric oxide', {'entities': [(10, 15, 'PRODUCT'), (12, 15, 'PRODUCT'), (624, 651, 'PRODUCT'), (1937, 1956, 'PRODUCT')]})]
Отсюда ожидается вывод:
dataset = [('made of iron oxide', {'entities': [(12, 16, 'PRODUCT'), (17, 20, 'PRODUCT'), (15, 24, 'PRODUCT')]}), ('made of ferric oxide', {'entities': [(10, 15, 'PRODUCT'), (624, 651, 'PRODUCT'), (1937, 1956, 'PRODUCT')]})]
Я написал код, который удаляет все перекрывающиеся значения в списке кортежей: Пример:
newinput = [(12, 16, 'PRODUCT'), (17, 20, 'PRODUCT'), (15, 24, 'PRODUCT'), (12, 19, 'PRODUCT'),(10, 15, 'PRODUCT'), (12, 15, 'PRODUCT'), (624, 651, 'PRODUCT'), (1937, 1956, 'PRODUCT')]
# using set
visited = set()
# Output list initialization
Outputs = []
# Iteration
for a, b, c in newinput:
if not a in visited:
# print(a)
visited.add(a)
# print(visited)
Outputs.append((a, b,c))
# print(Outputs)
# elif not b in visited:
# visited.add(b)
# Output.append((a, b,c))
# else:
# pass
agn = []
newv = set()
for a, b, c in Outputs:
# print(b)
if not b in newv:
newv.add(b)
# print(newv)
agn.append((a,b,c))
print(agn)
#Output:
#[(12, 16, 'PRODUCT'), (17, 20, 'PRODUCT'), (15, 24, 'PRODUCT'), (10, 15, 'PRODUCT'), (624, 651, 'PRODUCT'), (1937, 1956, 'PRODUCT')]
Код работает нормально, и я могу сохранить кортежи только с уникальными номерами в списке. Теперь я хочу сохранить предложения, связанные с уникальными кортежами (как указано в ожидаемом формате вывода). Кроме того, мой примерный набор данных представляет собой огромный список, и я хочу выполнить операции на месте и сохранить связанные предложения (например, «сделанные из оксида железа») также с сущностями, а не разделять их. Как я могу сделать это эффективно, чтобы не использовать несколько списков, а также получить результат в ожидаемом формате?