def _longest_common_substring_length(a, b): if not a or not b: return 0 prev = [0] * (len(b) + 1) max_len = 0 for i in range(1, len(a) + 1): curr = [0] * (len(b) + 1) for j in range(1, len(b) + 1): if a[i - 1] == b[j - 1]: curr[j] = prev[j - 1] + 1 if curr[j] > max_len: max_len = curr[j] prev = curr return max_len def analyze_fields(question, field_list): if question is None or field_list is None: return {} fields = field_list.split("@@") ratios = [] field_count = 0 for field in fields: if not field: continue field_count += 1 lcs_len = _longest_common_substring_length(question, field) ratios.append(lcs_len / len(field)) if field_count == 0: return {} non_zero = sum(1 for r in ratios if r != 0) avg = sum(ratios) / field_count max_ratio = max(ratios) if ratios else 0 return { "field_count": field_count, "non_zero_count": non_zero, "avg_ratio": avg, "max_ratio": max_ratio, }