Matlab文本分析中如何对提取的PDF文本按行统计词数及相关指标
Matlab多行文本逐行词数统计实现方案
上述三项统计需求完全可以实现。之前调用nWords=numel(strsplit(str))、tokenizedDocument仅能得到全局总词数,核心原因是处理时把所有行的内容拼接为单个全局字符串传入分词逻辑,没有建立逐行对应的处理映射。
前置准备
首先需要将从PDF提取的整块多行文本,拆分为每个元素对应一行文本的字符串数组,这是实现逐行统计的基础。通用处理代码:
% 导入提前从PDF提取的整块文本内容到extractedText变量 % 统一兼容不同格式的换行符,按行拆分得到逐行的字符串数组 cleanText = replace(string(extractedText), [char(13), char(10)+char(13)], char(10)); lines = split(cleanText, char(10));
分需求实现
1. 统计每一行文本的词数
两种适配你之前尝试过的处理逻辑的正确写法:
- 基于
strsplit的逐行计算:
% 逐行拆分计算词数 wordCountPerLine = arrayfun(@(singleLine) numel(strsplit(singleLine)), lines); % 修正空行的计数偏差:空字符串经strsplit会默认返回1个空元素,需手动归零 wordCountPerLine(lines == "") = 0;
- 基于
tokenizedDocument的逐行计算(更适配文本分析场景,可自动识别标点边界、连续空格等格式问题):
% 将逐行字符串转为文档数组,每一行对应一个独立文档 docs = tokenizedDocument(lines); % 内置函数doclength直接返回每个文档的词数 wordCountPerLine = doclength(docs);
2. 计算所有行的平均词数
拿到逐行词数数组后,可根据统计口径直接计算均值:
% 统计口径:包含空行(空行词数记为0)的全局平均词数 avgWordCount = mean(wordCountPerLine); % 统计口径:仅计算非空行的平均词数 nonEmptyWords = wordCountPerLine(wordCountPerLine > 0); avgWordCount_nonEmpty = mean(nonEmptyWords);
3. 统计仅包含单个词的行的数量
直接对逐行词数数组做匹配计数即可:
singleWordLineCount = sum(wordCountPerLine == 1);
常见注意事项
- 不要将所有行的文本拼接为单个长字符串再传入分词函数,否则分词器会将整块内容识别为单个文档,最终仅能得到全局总词数,无法拆分逐行结果
- 从PDF提取的文本常存在格式不统一的换行符,拆分前统一替换换行标记,可避免出现一行被拆成多行、多行粘成一行的计数偏差
内容的提问来源于stack exchange,提问作者wwwlabwy
相关产品推荐
相关产品推荐

