Fra*_*que 5 python tuples overlapping-matches
我正在寻找解决这个问题的最有效内存的方法.
我有一个元组列表,表示句子中的部分字符串匹配:
[(0, 2), (1, 2), (0, 4), (2,6), (23, 2), (22, 6), (26, 2), (26, 2), (26, 2)]
Run Code Online (Sandbox Code Playgroud)
每个元组的第一个值是匹配的起始位置,第二个值是长度.
我们的想法是折叠列表,以便仅报告最长的继续字符串匹配.在这种情况下,它将是:
[(0,4), (2,6), (22,6)]
Run Code Online (Sandbox Code Playgroud)
我不想只是最长的范围,比如在算法中找到最长的非重叠序列,但我希望所有范围最长时间折叠.
万一你想知道,我正在使用Aho-Corasick的纯python实现来将静态字典中的术语与给定的文本片段进行匹配.
编辑:由于这些元组列表的性质,应单独打印重叠但不是自包含的范围.例如,在单词betaz
和zeta
词典中,匹配betazeta
是[(0,5),(4,8)]
.由于这些范围重叠,但没有一个包含在另一个中,答案应该是[(0,5),(4,8)]
.我还修改了上面的输入数据集,以便涵盖这种情况.
谢谢!
import operator
lst = [(0, 2), (1, 2), (0, 4), (2,6), (23, 2), (22, 6), (26, 2), (26, 2), (26, 2)]
lst.sort(key=operator.itemgetter(1))
for i in reversed(xrange(len(lst)-1)):
start, length = lst[i]
for j in xrange(i+1, len(lst)):
lstart, llength = lst[j]
if start >= lstart and start + length <= lstart + llength:
del lst[i]
break
print lst
#[(0, 4), (2, 6), (22, 6)]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2634 次 |
最近记录: |