二分查找
常规思路:
1.找到中间值,判断与待查找值大小,分别去左右序列中的中间值比较大小
2.如果某序列为空,则返回
依据生成的文本摘要,从原文中找出对应的相似的句子,作为当前节点,由于summary的前后顺序性,所以可以理解为二分查找的思路,分别从左右继续进行查找
核心逻辑
def extract_matching(texts, summaries, start_i=0, start_j=0): ##?? 怎么抽取匹配
"""在texts中找若干句子,使得它们连起来与summaries尽可能相似
算法:texts和summaries都分句,然后找出summaries最长的句子,在texts
中找与之最相似的句子作为匹配,剩下部分递归执行。
"""
if len(texts) == 0 or len(summaries) == 0:
return []
i = np.argmax([len(s) for s in summaries]) ##?? argmax,为何summaries选取最长的
j = np.argmax([compute_main_metric(t, summaries[i], 'char') for t in texts]) ##?? 根据rouge评分选最高的对应的index
lm = extract_matching(texts[:j + 1], summaries[:i], start_i, start_j)
rm = extract_matching(
texts[j:], summaries[i + 1:],