如何用电子表格跟踪文本中分组词频并生成可视化图表?
当然可以!用Excel或者LibreOffice Calc这类电子表格工具,完全能实现你要的分组词汇词频跟踪+页码维度可视化需求,我结合你的具体例子一步步拆解:
要按页码统计,首先得把每页的文本单独拆出来对应页码:
对于MS Word:
可以用VBA宏快速导出每页内容到Excel,省得手动复制粘贴:
打开你的Word文档,按Alt+F11打开VBA编辑器,插入一个新模块,粘贴下面的代码:
Sub ExtractPagesToExcel() Dim xlApp As Object, xlWB As Object, xlWS As Object Dim pageCount As Integer, i As Integer Set xlApp = CreateObject("Excel.Application") Set xlWB = xlApp.Workbooks.Add Set xlWS = xlWB.Sheets(1) ' 设置表头 xlWS.Cells(1, 1) = "页码" xlWS.Cells(1, 2) = "页面内容" pageCount = ActiveDocument.ComputeStatistics(wdStatisticPages) For i = 1 To pageCount ' 复制当前页内容 ActiveDocument.Bookmarks("\Page").Range.Copy ' 写入页码和内容到Excel xlWS.Cells(i + 1, 1) = i xlWS.Cells(i + 1, 2).PasteSpecial xlPasteValues Next i xlApp.Visible = True Set xlApp = Nothing End Sub
运行这个宏,就能得到一个Excel表,第一列是页码,第二列对应每页的文本内容。
对于LibreOffice Writer:
可以用更简单的手动方法快速拆分:
- 打开Writer文档,按
Ctrl+H打开查找替换对话框 - 在「查找内容」里输入
^$(匹配分页符),「替换为」里输入---页码&---(分页符会被替换成带页码标记的分隔线) - 替换完成后,全选文本复制到Calc里,按
---页码分割成每行对应一页的内容,再手动整理出页码列和内容列。
在电子表格里新建一个工作表(比如命名为「词汇分组」),整理你要统计的词汇和对应的组:
| 词汇 | 分组 |
|---|---|
| Banana | food(食物) |
| Steak | food(食物) |
| Blue | color(颜色) |
| Red | color(颜色) |
| Alex | proper names(专有名词) |
| Rachel | proper names(专有名词) |
| Tim | proper names(专有名词) |
回到存放页码和内容的工作表(比如「页面数据」),新增三列表头:food词频、color词频、proper names词频。
Excel里的统计公式:
以第一页(第2行)的food词频为例,输入公式:
=SUMPRODUCT(--(ISNUMBER(SEARCH(词汇分组!$A$2:$A$4, 页面数据!B2))), --(词汇分组!$B$2:$B$4="food(食物)"))
把公式下拉到所有页码行,就能自动统计每页food组词汇的总出现次数。
同理,color组的公式把最后一个参数改成"color(颜色)",专有名词组改成"proper names(专有名词)"即可。
LibreOffice Calc里的公式:
语法和Excel几乎一致,把公式里的工作表名称调整成你实际命名的即可:
=SUMPRODUCT(--(ISNUMBER(SEARCH(词汇分组.$A$2:$A$4; 页面数据.$B2))); --(词汇分组.$B$2:$B$4="food(食物)"))
关键注意点:
- 用
SEARCH而不是FIND,是因为它不区分大小写(比如能识别banana和Banana) - 如果要避免部分匹配(比如不想把
BananaPie算成Banana),可以给词汇加单词边界:把词汇分组!$A$2:$A$4改成"\b"&词汇分组!$A$2:$A$4&"\b",这样只会匹配完整单词。
- 选中「页码」列和三个分组的词频列(比如A1:D101)
- 插入折线图(或柱状图,看你偏好)
- 调整图表设置:把横轴设为「页码」,纵轴设为「词频」,给每条线标上对应的分组名称
这样你就能直观看到每页各组词汇的使用情况,零使用的页码会在图表上显示为0刻度的点。
举个实际例子:如果第6页的内容是"Rachel ate a Banana and Steak. The room was painted Blue and Red. Tim helped clean.",那么food组词频是2,color组是2,proper names组是2;如果第7页没有任何分组词汇,三个列都会显示0,图表上对应点就落在纵轴0的位置。
内容的提问来源于stack exchange,提问作者chris-j

