| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- 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,
- }
|