90 lines
4.0 KiB
Python
90 lines
4.0 KiB
Python
def check_overlap(l):
|
|
for i in range(len(l)):
|
|
#print(f'### ITERATION at index i: {i}')
|
|
for j in range(i+1, len(l)):
|
|
len_i = len(range(l[i][0], l[i][1]))
|
|
len_j = len(range(l[j][0], l[j][1]))
|
|
#print(len_i)
|
|
#print(len_j)
|
|
if len_i < len_j:
|
|
x = l[i][:2]
|
|
y = l[j][:2]
|
|
else:
|
|
x = l[j][:2]
|
|
y = l[i][:2]
|
|
|
|
rangex = range(x[0],x[1])
|
|
rangey = range(y[0],y[1])
|
|
#print(f'Target is: {x}\nY: {y}')
|
|
if rangex.start <= rangey.start:
|
|
if rangex.stop > rangey.start:
|
|
print('## Overlap!')
|
|
print(f'X: {rangex}\nY: {rangey}')
|
|
elif rangex.start >= rangey.start:
|
|
if rangex.start < rangey.stop:
|
|
print('## Overalp!')
|
|
print(f'X: {rangex}\nY: {rangey}')
|
|
|
|
|
|
def range_overlapping(x, y):
|
|
if x.start == x.stop or y.start == y.stop:
|
|
return False
|
|
return ((x.start < y.stop and x.stop > y.start) or
|
|
(x.stop > y.start and y.stop > x.start))
|
|
|
|
|
|
def overlap(x, y):
|
|
if not range_overlapping(x, y):
|
|
return set()
|
|
return set(range(max(x.start, y.start), min(x.stop, y.stop)+1))
|
|
|
|
|
|
def remove_overlapping(l, overlaps):
|
|
return
|
|
|
|
|
|
def solve_overlap(l):
|
|
#print(f'Input len: {len(l)}')
|
|
if len(l) == 0:
|
|
return []
|
|
res_l = l.copy()
|
|
for i in range(len(l)):
|
|
#print(f'### ITERATION at index i: {i}')
|
|
for j in range(i+1, len(l)):
|
|
len_i = len(range(l[i][0], l[i][1]))
|
|
len_j = len(range(l[j][0], l[j][1]))
|
|
#print(len_i)
|
|
#print(len_j)
|
|
if len_i < len_j:
|
|
x = l[i][:2]
|
|
y = l[j][:2]
|
|
else:
|
|
x = l[j][:2]
|
|
y = l[i][:2]
|
|
#print(f'Target is: {x}\nY: {y}')
|
|
|
|
rangex = range(x[0],x[1])
|
|
rangey = range(y[0],y[1])
|
|
|
|
if rangex.start <= rangey.start:
|
|
if rangex.stop > rangey.start:
|
|
#print('## Overlap!')
|
|
#print(f'X: {rangex}\nY: {rangey}')
|
|
to_pop = l[i]
|
|
try: res_l.remove(to_pop)
|
|
except: print(f'{to_pop} NOT IN LIST')
|
|
elif rangex.start >= rangey.start:
|
|
if rangex.start < rangey.stop:
|
|
#print('## Overalp!')
|
|
#print(f'X: {rangex}\nY: {rangey}')
|
|
to_pop = l[i]
|
|
try: res_l.remove(to_pop)
|
|
except: print(f'{to_pop} NOT IN LIST')
|
|
#print('-'*25)
|
|
#print(f'Ouput len: {len(res_l)}')
|
|
return res_l
|
|
|
|
|
|
if __name__ == "__main__":
|
|
l = [[84, 106, "PER"], [108, 114, "LOC"], [119, 121, "MISC"], [123, 124, "MISC"], [164, 169, "PER"], [295, 298, "MISC"], [311, 312, "MISC"], [338, 345, "LOC"], [381, 384, "MISC"], [525, 530, "PER"], [804, 808, "PER"], [896, 906, "MISC"], [931, 936, "PER"], [960, 965, "PER"], [1006, 1029, "MISC"], [1031, 1032, "MISC"], [1083, 1084, "MISC"], [1121, 1122, "MISC"], [1163, 1173, "PER"], [1266, 1274, "PER"], [1297, 1300, "MISC"], [1462, 1463, "MISC"], [1500, 1501, "MISC"], [1569, 1579, "PER"], [1589, 1594, "PER"], [1822, 1830, "PER"], [1832, 1836, "MISC"], [1869, 1870, "MISC"], [1910, 1918, "MISC"], [1954, 1963, "LOC"], [1986, 1994, "MISC"], [1996, 2000, "MISC"], [2049, 2053, "MISC"], [2061, 2066, "MISC"], [2081, 2093, "MISC"], [2096, 2102, "LOC"], [2111, 2117, "LOC"], [2135, 2139, "LOC"], [2209, 2220, "MISC"], [2244, 2247, "MISC"], [2302, 2311, "MISC"], [2319, 2322, "MISC"], [2325, 2330, "PER"], [2337, 2340, "PER"], [2446, 2453, "LOC"], [2459, 2466, "PER"], [2715, 2723, "PER"], [2734, 2742, "PER"], [2775, 2782, "MISC"], [2821, 2828, "MISC"], [2831, 2840, "MISC"], [2843, 2845, "MISC"], [2857, 2869, "PER"], [2871, 2877, "LOC"], [2882, 2884, "MISC"], [2886, 2888, "MISC"], [2943, 2944, "MISC"], [3009, 3018, "MISC"]]
|
|
check_overlap(l) |