即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

python小程序–实现对文本的汉字统计

编程语言 rgb000000 26℃ 0评论
本文目录
[隐藏]

green hand 写的一遍小博客,请大佬不惜赐教

1.一、效果图

程序效果图


这里写图片描述

1.1. 然后我用ubuntu自带的openoffice打开验证

这里写图片描述


这里写图片描述

1.2. 看底下的字数统计,可以验证程序的准确性,第一张图显示的10个非汉字包括‘2’‘0’‘X’‘X’‘1’‘1’另外的4 个是4个英文分号‘;’
🙂

2.二、源代码

程序在ubuntu16上用pyinstaller进行打包,windows上我还没有进行测试,理论上在windows上用pyinstaller打包也能直接用。


基于python2.7.12 :-)


1、代码一


这里写个函数让UI代码调用,在下面我会讲下我的实现逻辑。

# -*- coding:utf-8 -*-
import re
def count_word(filename):
  #filename = str(input('请输入文件路径'))这里用于手动调试用
  file = open(filename,'rb+')#采用读二进制的形式打开文件
  article =file.readlines()  #这个函数会返回一个列表,以\n分割,例如['无聊的小黑\n','rgb-#000000\n']
  Chc_sum = 0                #存汉字个数的变量
  noChc_sum = 0              #存非汉字个数的变量
  for line in article:       #遍历列表,对列表的每个元素进行分析
    Chc_sum+=len(re.findall(r'\\x..','%r'%line))/3
    #utf-8采用3个16进制数表示,所以我这里采用正则表达式匹配'\x..'然后以16进制的数字个数除以3得到汉字个数
    noChc_sum+=len(re.sub(r'\\.','',re.sub(r'\\x..','','%r'%line)))-2
    #这里的逻辑是删除元素中的所有16进制数然后计算剩余的字符串长度,之所以减二是因为,
    #这个算法会把字符串两边的引号也算在里面,大家可以print输出一下看看,我这个里采用非转译的格式输出的(r)
  print '文中含有 %d 个汉字'%Chc_sum
  print '文中非汉字有 %d 个'%noChc_sum 
  print '共有 %d 个字'% (Chc_sum+noChc_sum)
  file.close()
  list = [Chc_sum,noChc_sum,Chc_sum+noChc_sum]#返回一个包含结果的列表
  return list
def test(i):#这里用于测试函数调用是否成功的测试函数
  print i

2、代码二


这里用python自带tkinter来写UI

# -*- coding:utf-8 -*-
from Tkinter import *
import count_word
class APP:
  def __init__(self,master):
    self.label_filepath = Label(root,text='文件路径:')#一个Label
    self.label_filepath.grid(row=0,sticky = W)        #这个Label的位置

    self.entry_filename = Entry(root,width=25)        #一个输入框
    self.entry_filename.grid(row = 0,column=1)        #这个输入框的位置

    self.button = Button(root,text = 'GO',command = self.GO,height=1)#一个按钮
    self.button.grid(row = 0,column = 2,sticky = E)                  #这个按钮的位置

    self.text = Text(root,width=40,height = 10)       #一个文本框
    self.text.grid(row = 1,column=0,columnspan = 3)   #这个文本框的位置
  def GO(self):
    filename = self.entry_filename.get()              #取得路径
    try:                                              #采用异常来简易的进行提醒
      res = count_word.count_word(filename)
      self.text.delete(1.0,END)                       #清空文本框
      self.text.insert(1.0,'汉字有%d个\n'%res[0])
      self.text.insert(1.0,'非汉字有%d个\n'%res[1])
      self.text.insert(1.0,'共有%d个字\n'%res[2])
    except :
      self.text.delete(1.0,END)
      self.text.insert(1.0,'发生错误,可能是路径不对')


root = Tk()
root.title('汉字统计器  -v1.0')                       #设置窗体标题
root.resizable(0,0)                                 #设置窗体大小不能被改变
app = APP(root)
#count_word.test('11111')#测试函数的调用用的测试代码
root.mainloop()

3.三、涉及的知识

  1. 正则表达式


    菜鸟教程-正则表达式


    参考的一位仁兄关于正则表达式的博客

  2. tkinter


    参考的另一位仁兄关于tkinter布局的博客

4.————

最后,限于个人能力有限,有些地方可能说的不是很清楚,也可能有些错误,希望大家不惜赐教。

转载请注明:CodingBlog » python小程序–实现对文本的汉字统计

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情