You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从docx提取的文本数组中精准提取数据生成JS对象的问题

优化DOCX数据提取逻辑的解决方案

针对你遇到的关键词与内容空格不固定、字段提取精度差的问题,可以通过以下方式改进fillObject函数:

核心优化思路

  • 用正则表达式处理任意数量的空白分隔符,精准匹配关键词与对应内容
  • 支持跨多行的字段内容拼接(部分字段内容可能换行显示)
  • 避免无关文本混入目标字段

改进后的代码实现

function fillObject(lines, targetObj, keywords) {
  // 为每个关键词生成匹配正则,兼容任意空格分隔,捕获有效内容
  const regexMap = keywords.reduce((map, key) => {
    // 匹配关键词开头,忽略后续任意空白,捕获直到行尾的内容
    // 若需兼容大小写,可在正则后添加'i'标志,如new RegExp(`^${key}\\s*(.*)$`, 'i')
    map[key] = new RegExp(`^${key}\\s*(.*)$`);
    return map;
  }, {});

  let currentField = null; // 跟踪需要跨行拼接的字段

  lines.forEach(line => {
    const cleanLine = line.replace(/<[^>]+>/g, '').trim(); // 清理XML标签残留
    if (!cleanLine) return;

    let isKeywordLine = false;
    // 遍历关键词,检查当前行是否为关键词行
    for (const [key, regex] of Object.entries(regexMap)) {
      const match = cleanLine.match(regex);
      if (match) {
        const content = match[1].trim();
        if (content) {
          targetObj[key] = content;
          currentField = null;
        } else {
          // 关键词行无内容,标记为待填充字段,后续行补充
          currentField = key;
        }
        isKeywordLine = true;
        break;
      }
    }

    // 非关键词行且存在待填充字段时,追加内容
    if (!isKeywordLine && currentField) {
      targetObj[currentField] = (targetObj[currentField] || '') + ' ' + cleanLine;
    }
  });

  return targetObj;
}

// 示例调用
const docLines = [
  "CONTACTO     Maria Lopez",
  "TELEFONO    +34 123 456 789",
  "DIRECCION ",
  "Av. de la Constitucion 45",
  "BARRIO    Centro",
  "CIUDAD    Barcelona"
];

const result = {};
fillObject(docLines, result, ['CONTACTO', 'TELEFONO', 'DIRECCION', 'BARRIO', 'CIUDAD']);
console.log(result);

额外优化建议

  • 如果某字段(如CONTACTO)有固定格式(如包含姓名、电话),可在赋值前添加校验逻辑,例如用正则判断内容是否符合预期格式,过滤无关文本
  • 若文档中关键词可能带冒号(如CONTACTO:),可修改正则为^${key}:?\\s*(.*)$,兼容带冒号的格式
  • 处理多行内容时,可根据实际需求调整拼接规则(如是否保留换行符)

内容的提问来源于stack exchange,提问作者luis-san

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:42:44