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

PHP中如何检测表格列内跨行拆分的名称

PHP中如何检测表格列内跨行拆分的名称

嘿,我看你已经在处理PDF表格文本提取的问题了,而且空格规范化、换行清理这些基础工作都做了,考虑得挺周到!针对你问的「检测表格列内跨行拆分的名称」,我结合你现有的代码给你捋捋完善思路:

首先得明确:跨行拆分的名称,本质就是原本属于同一个单元格的内容被拆成了多行,我们要做的就是把这些零散的行识别出来并拼接回去。核心思路就是用一个变量暂存“未完成”的名称,等遇到不属于名称列的内容时,再把完整的名称存入结果。

结合你写的代码,我们可以这样优化:

$parser = new Parser();
$pdf    = $parser->parseFile($_FILES['pdf']['tmp_name']);
$text   = $pdf->getText();

// 把NBSP转换成普通空格,避免特殊空格干扰文本判断
$text = preg_replace('/\x{00A0}/u', ' ', $text);
// 处理Weekly Totals前的多余换行,你这步已经考虑到了,很实用
$text = preg_replace('/\R+(?=\s*Weekly\s+Totals)/iu', ' ', $text);

// 按行拆分文本
$lines = preg_split('/\R/u', $text);

$results     = [];
$currentType = null;
$pendingName = ''; // 用来暂存还没拼接完成的跨行名称

foreach ($lines as $line) {
    $line = trim($line);
    if (empty($line)) continue; // 跳过空行

    // 这里是核心:你需要根据自己的PDF表格结构,定义判断"名称行"的规则
    // 举个例子:假设你的名称列内容不含数字,都是纯文本,就可以这么判断
    $isNameLine = !preg_match('/\d+/', $line);
    
    if ($isNameLine) {
        if (!empty($pendingName)) {
            // 如果之前有暂存的未完成名称,说明当前行是跨行的一部分,直接拼接
            $pendingName .= ' ' . $line;
        } else {
            // 遇到新的名称行,开始暂存
            $pendingName = $line;
        }
    } else {
        // 当前行是数据行,说明之前的名称已经完整了,存入结果
        if (!empty($pendingName)) {
            $results[] = [
                'category_name' => $pendingName,
                'row_data' => $line
            ];
            $pendingName = ''; // 重置暂存变量,准备接收下一个名称
        } else {
            // 处理没有对应名称的数据行(根据你的业务需求调整)
            $results[] = ['row_data' => $line];
        }
    }
}

// 循环结束后,别忘了检查有没有剩下的未完成名称
if (!empty($pendingName)) {
    $results[] = ['category_name' => $pendingName];
}

这里必须重点提醒你:$isNameLine的判断规则一定要贴合你的实际PDF表格!比如有的表格名称可能带特定前缀、固定在每行前几个字符的位置、或者和数据行有明显格式区分,你得根据实际情况调整这个判断逻辑——毕竟不同PDF的表格排版差异可大了。

要是你的表格里名称跨行是因为单词被截断(比如一行末尾是"Depart",下一行是"ment"),还能再优化:比如检查暂存的$pendingName末尾是不是完整单词(用preg_match('/[a-z0-9]$/i', $pendingName)检测),如果是不完整的,直接拼接当前行,这样识别会更精准。

备注:内容来源于stack exchange,提问作者h25

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:37:58