VBA统计WORD文档中汉字、英文及其组合出现的次数,并输出
2019-02-21 15:09
232 查看
使用前,需要在word内插入一个textbox1和一个commandbutton1,然后去掉文档中的标点符号。笔者比较懒,未加入剔除标点的代码。
理论上下述代码可以统计999个字符(含标点)的文本,如需增加文本数量,则只需要增加数组体积即可。
代码只是通过比较简单的for ,do循环实现,没啥技术含量哈。
Sub Button1_click() '统计词频 Dim input_word As String Dim input_word_part(1 To 9999) As String Dim output_word_part(1 To 9999) As String Dim temp_input_word_part As String Dim count_word(1 To 9999) As Integer Dim count_output As String Dim input_len As Integer Dim i, j, k, p As Integer 'i为数组序号,'j为字符长度 'input_word_part()为全部元素 'output_word_part()为去重后元素 input_word = Trim(TextBox1.Text) input_len = Len(input_word) '数组赋值 i = 1 j = 1 Do While j <= 9 If Len(Mid(input_word, i, j)) = j Then input_word_part(j * 1000 + i) = Mid(input_word, i, j) temp_input_word_part = Mid(input_word, i, j) End If i = i + 1 If i = 1000 Then MsgBox "字符长度为" & j & "的数据量超限!" Exit Do End If If Mid(input_word, i, j) = "" Then i = 1 j = j + 1 End If Loop '元素去重 i = 2 'input指针 j = 1 '为字符长度 k = 1 'output比较指针 p = 2 'output指针 Do While j <= 9 output_word_part(j * 1000 + 1) = input_word_part(j * 1000 + 1) temp_input_word_part = input_word_part(j * 1000 + i) p = 2 k = 1 Do If temp_input_word_part = output_word_part(j * 1000 + k) Then Exit Do ElseIf temp_input_word_part <> output_word_part(j * 1000 + k) Then If output_word_part(j * 1000 + p) <> "" Then p = p + 1 ElseIf output_word_part(j * 1000 + p) = "" Then output_word_part(j * 1000 + p) = temp_input_word_part p = p + 1 End If End If k = k + 1 If input_word_part(j * 1000 + k) = "" Then Exit Do End If Loop i = i + 1 If input_word_part(j * 1000 + i) = "" Then j = j + 1 i = 2 End If Loop '统计数组元素出现频率 i = 1 'input指针 j = 1 '为字符长度 p = 1 'output指针 Do While j <= 9 temp_input_word_part = output_word_part(j * 1000 + p) i = 1 Do If output_word_part(j * 1000 + p) <> "" Then If input_word_part(j * 1000 + i) = temp_input_word_part Then count_word(j * 1000 + p) = count_word(j * 1000 + p) + 1 i = i + 1 If input_word_part(j * 1000 + i) = "" Then Exit Do End If ElseIf input_word_part(j * 1000 + i) <> temp_input_word_part Then i = i + 1 If input_word_part(j * 1000 + i) = "" Then Exit Do End If End If ElseIf output_word_part(j * 1000 + p) = "" Then Exit Do End If Loop p = p + 1 If output_word_part(j * 1000 + p) = "" Then p = 1 j = j + 1 End If Loop '输出结果 p = 1 'output指针 For j = 2 To 9 '通常两个汉字以上才可称为词语,未列出单个汉字的出现频率 Do count_output = count_output & "“" & output_word_part(j * 1000 + p) & "”的数量为:" & count_word(j * 1000 + p) & Chr(13) p = p + 1 If output_word_part(j * 1000 + p) = "" Then j = j + 1 p = 1 Exit Do End If Loop Next Documents.Add.Content.Text = "统计结果如下:" & Chr(13) & count_output End Sub
输出结果如下图:
当然,如果结合中文词典使用,则可以直接输出特定含义的词组统计数量。
THE END
相关文章推荐
- 统计一段文字中每个字符出现的次数,并输出结果(包含字符及其出现次数)保存在一个适合的集合中。
- Java 读取一段英文文档统计每个单词出现的次数和单词的总数
- java实现读取一篇英文文章,统计其中每个单词出现的次数并排序输出
- 设计相应的数据结构和算法,尽量高效的统计一片英文文章(总单词数目)里出现的所有英文单词, * 按照在文章中首次出现的顺序打印输出该单词和它的出现次数。
- Java 读取一段英文文档统计每个单词出现的次数和单词的总数
- Java统计一篇文章中出现次数最多的汉字或英文单词 又出现次数的统计
- 统计一篇英文文章内每个单词出现频率,并返回出现频率最高的前10个单词及其出现次数
- 用array_count_values统计一篇英文文档中每个单词的出现次数,结果用表格展示出来
- Java interview 统计一篇英文文档的单词数,并输出次数最多的10个
- 统计单词出现的次数并按单词出现的次数顺序输出单词及其次数
- 统计单词出现的次数并按单词出现的次数顺序输出单词及其次数
- go语言之map练习(二):编写一个程序wordfreq程序,统计输入文本中每个单词出现的频率(次数)
- C++ 实现从0~100中随机生成50个数,统计出现的数字最大值和最小值,输出出现最多的次数及对应的数字
- 统计一个字符串中每个字符出现的次数,并按自然顺序输出
- 统计输出某个文件中每个单词出现的次数
- 统计你的手机号码中出现次数最多的数字,并打印出此数字及其出现次数
- 随机产生50个30到35的整数,统计每个数字出现的次数(TreeMap实现),输出时按照数字的降序排列,并且统计出现次数最多的数字和它的次数。
- 有一个文件ip.txt,每行一条ip记录,共若干行,下面哪个命令可以实现“统计出现次数最多的前3个ip及其次数”?
- 正则表达式限制文本框只能输入数字,小数点,英文字母,汉字及其组合
- 把当前文件中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出