首页 » 技术分享 » 宋晓丽20190912-3 词频统计

宋晓丽20190912-3 词频统计

 

此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583]

该作业采用的编程语言为Python,其代码的地址为[https://e.coding.net/sxl357/sxl.githttps://e.coding.net/sxl357/sxl.git]https://e.coding.net/sxl357/sxl.githttps://e.coding.net/sxl357/sxl.git

功能1 小文件输入

功能2 支持命令行输入英文作品的文件名

功能3 支持命令行输入存储有英文作品文件的目录名

功能4 从控制台读入英文单篇作品

1.功能1

重难点:

(1)如何输入命令行参数?

引入sys模块,使用sys.argv[]实现命令行参数的读取。

(2)如何打开文件?

引入os模块,利用open()函数打开文件,并返回文件对象,open()函数的基本形式为:open(file,mode),file为文件路径,mode为操作模式。

因为文件路径必须要有后缀.txt,所以先检查传入的文件路径有没有.txt,如果没有就加上。

因为py文件默认ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时会报错,所以在open()函数里加‘encoding='utf-8’,意为以字节为单位对Unicode进行编码保存,这样遇到中文也不会出错。

(3)如何将文件中的所有单词整理在一个列表?

利用re模块的findall()函数,findall(pattern, string)以列表的形式返回string中能与pattern匹配的子串,r'[a-z0-9^-]+',其中r是标识,[a-z0-9^-]+是正则表达式,表示一直匹配由小写字母、数字和非连字符‘-’组成的字符串,用read()函数读取文本内容,因为前面匹配时只提了小写字母,所以在用lower()函数将文本中所有的大写字母转为小写字母。

(4)如何统计各个单词出现的次数?

collections模块的Counter()函数用来跟踪值出现的次数,以字典的键值对形式存储,其中元素为key,其计数为value,返回一个字典

(5)如何统计总的单词个数(不重复)?

遍历Counter()函数生成的字典,设num初始值为1,每遍历一个键值对,num值加1

重要代码:

from collections import Counter
import sys
from re import findall
def statistic(name):
    # 判断传入的命令行参数是否含有.txt,如果没有,要加上,再作为打开路径
    d='.txt'
    if d in name:
        path=name
    else:
        path=name+d
    f=open(path,'r',encoding='utf-8')
    lists=findall(r'[a-z0-9^-]+',f.read().lower())
    words=Counter(lists)
    #遍历字典,统计键值对数
    num=0
    for key,value in words.items():
        num+=1

转载自原文链接, 如需删除请联系管理员。

原文链接:宋晓丽20190912-3 词频统计,转载请注明来源!

0