您的位置:首页 > 编程语言 > VB

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐