ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 13670|回复: 24

[原创并分享]中文文档字词数频次统计

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-2-3 05:53 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

前时有本论坛网友和officefans论坛网友问及中文文档中字词数出现频次的统计问题,今天抽空对原有代码进行了完善和强化了操作对话功能,以满足不同用户的需要。并以原创为主题贴,以利今后搜索与查找。

以下代码供参考:

'* +++++++++++++++++++++++++++++
'* Created By
守柔(ShouRou)@ExcelHome 2005-2-3 5:50:25
'
仅测试于System: Windows NT Word: 10.0 Language: 2052
'^The Code CopyIn [ThisDocument-ThisDocument]^'
'*
-----------------------------

Sub WordsCountThree()
    Dim i As Range, aVar As Variable, aString As String, MyString As String, BS As String
    On Error Resume Next
    '友情提示
    MsgBox "受文档字数和可用内存以及WORD自身限制,您的操作可能会需要一段时间!", _
           vbOKOnly + vbExclamation, "Warnning"
    Select Case MsgBox("按YES统计字的出现频次,按NO统计词的出现频次,按CANCEL统计字与词!", _
                       vbYesNoCancel + vbInformation + vbDefaultButton2)
    Case vbYes
        BS = "字数频次统计列表"
        For Each i In Me.Characters    '字中循环
            If Asc(i) < -2050 And Asc(i) > -20319 Then
                If MyString = "" Then GoTo GNY
                If InStr(MyString, i.Text & ",") = 0 Then
GNY:                     aString = i.Text & ","
                    MyString = MyString & aString
                Else
                    On Error Resume Next    '忽略错误
                    Me.Variables.Add Name:=i.Text    '添加文档变量
                    If Err.Number <> 0 Then    '设置错误陷阱
                        Err.Clear    '清除错误
                        '将次数累加写入
                        Me.Variables(i.Text).Value = Me.Variables(i.Text).Value + 1
                    Else
                        '首次写入文档变量时,其初始值为2
                        Me.Variables(i.Text).Value = 2
                    End If
                End If
            End If
        Next
    Case vbNo
        BS = "词数频次统计列表"
        For Each i In Me.Words    '词中循环
            If i.Characters.Count > 1 Then    '按照中文习惯为二个以上为词组
                '判断是否为中文字符
                If Asc(i.Characters(1)) < -2050 And Asc(i.Characters(1)) > -20319 Then
                    If MyString = "" Then GoTo GNN    '循环初始阶段跳至GX行标签
                    If InStr(MyString, i.Text & ",") = 0 Then
GNN:                         aString = i.Text & ","    '加入","分隔符以便精确定位
                        MyString = MyString & aString
                    Else
                        On Error Resume Next    '忽略错误
                        Me.Variables.Add Name:=i.Text    '添加文档变量
                        If Err.Number <> 0 Then    '设置错误陷阱
                            Err.Clear    '清除错误
                            '将次数累加写入
                            Me.Variables(i.Text).Value = Me.Variables(i.Text).Value + 1
                        Else
                            '首次写入文档变量时,其初始值为2
                            Me.Variables(i.Text).Value = 2
                        End If
                    End If
                End If
            End If
        Next
    Case vbCancel
        BS = "字词数频次统计列表"
        For Each i In Me.Words    '词中循环
            '判断是否为中文字符
            If Asc(i.Characters(1)) < -2050 And Asc(i.Characters(1)) > -20319 Then
                If MyString = "" Then GoTo GNC    '循环初始阶段跳至GX行标签
                If InStr(MyString, i.Text & ",") = 0 Then
GNC:                     aString = i.Text & ","    '加入","分隔符以便精确定位
                    MyString = MyString & aString
                Else
                    On Error Resume Next    '忽略错误
                    Me.Variables.Add Name:=i.Text    '添加文档变量
                    If Err.Number <> 0 Then    '设置错误陷阱
                        Err.Clear    '清除错误
                        '将次数累加写入
                        Me.Variables(i.Text).Value = Me.Variables(i.Text).Value + 1
                    Else
                        '首次写入文档变量时,其初始值为2
                        Me.Variables(i.Text).Value = 2
                    End If
                End If
            End If
        Next
    End Select
    aString = "": MyString = ""    '重新初始化变量
    Application.ScreenUpdating = False    '关闭屏幕更新
    With Selection
        .EndKey unit:=wdStory    '移到文档末尾
        '作一个区分标记
        .InsertAfter vbCrLf & "------------------------------------" & BS & " ------------------------------------" & vbCrLf
        .EndKey unit:=wdStory    '移到文档末尾
        For Each aVar In Me.Variables    '在文档变量中循环
            '插入文档中
            aString = """" & aVar.Name & """出现频次:" & vbTab & aVar.Value & vbCrLf
            MyString = MyString & aString    '文本累加写入内存变量中,以加速运行
        Next
        .InsertAfter MyString
        '根据出现频次排序
        .Sort FieldNumber:="域 1", SortFieldType:= _
              wdSortFieldNumeric, SortOrder:=wdSortOrderDescending
    End With
    VarClear    '清空文档变量
    Me.UndoClear    '清空撤消
    Application.ScreenUpdating = True    '恢复屏幕更新
End Sub
'----------------------
Sub VarClear()
    Dim V As Variable
    For Each V In Me.Variables
        V.Delete    '删除文档变量
    Next
End Sub
'----------------------
g5AWZI01.rar (13.25 KB, 下载次数: 391)


[此贴子已经被konggs于2007-3-5 17:22:00编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-2-3 05:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

昨晚今晨的网页一直有些问题,继续上传和一些管理功能错误。

相关图片如下:

相关链接:

http://club.excelhome.net/viewthread.php?tid=41567

[此贴子已经被作者于2005-2-3 6:06:25编辑过]

[原创并分享]中文文档字词数频次统计

[原创并分享]中文文档字词数频次统计

TA的精华主题

TA的得分主题

发表于 2005-2-3 09:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-2-4 01:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-3-5 15:48 | 显示全部楼层

测试报告:一篇含不重复汉字307个的文档,结果报告了134个统计结果

TA的精华主题

TA的得分主题

发表于 2007-3-5 16:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

菊兄有更新版的。

请搜索。

那有学习VBA最好的方法是多多录制宏。看系统。

还有看书:例如:老大的Word非常接触。

三者合一。

TA的精华主题

TA的得分主题

发表于 2007-3-5 16:53 | 显示全部楼层
守版主,能让使用者选择统计某词出现的频次吗?例如,只统计“中国人”出现的频次?
[此贴子已经被作者于2007-3-5 16:55:39编辑过]

TA的精华主题

TA的得分主题

发表于 2007-3-5 17:08 | 显示全部楼层
呵呵,正要用。
将高中化学课本和30多套习题处理了。结果:
总汉字数:401203——我自己都不相信,但千真万确。
不重复汉字数:1906。
频率前20名汉字:的中化是子应溶液反质物有在量分为体用一酸。
频率500名的汉字共出现:366775次。占91.4%。
频率1240名的汉字共出现:398356次。占99.3%。
但是,请教守柔:为何没出现一次的汉字?

TA的精华主题

TA的得分主题

发表于 2007-3-5 17:09 | 显示全部楼层
QUOTE:
以下是引用youusatst在2007-3-5 16:53:00的发言:
守版主,能让使用者选择统计某词出现的频次吗?例如,只统计“中国人”出现的频次?
直接用Word的查找功能啊。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-3-5 17:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
QUOTE:
以下是引用菊石泽露在2007-3-5 15:48:00的发言:

测试报告:一篇含不重复汉字307个的文档,结果报告了134个统计结果

请上传您的测试文档,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-12 17:28 , Processed in 0.027114 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表