任一英文的纯文本文件,统计其中的单词出现个数

第一版: 效率低

path = ‘test.txt‘
with open(path,encoding=‘utf-8‘,newline=‘‘) as f:
    word = []
    words_dict= {}
    for letter in f.read():
        if letter.isalnum():
            word.append(letter)
        elif letter.isspace(): #空白字符 空格 \t \n
            if word:
                word = ‘‘.join(word).lower() #转小写
                if word not in words_dict:
                    words_dict[word] = 1
                else:
                    words_dict[word] += 1
                word = []

#处理最后一个单词
if word:
    word = ‘‘.join(word).lower()  # 转小写
    if word not in words_dict:
        words_dict[word] = 1
    else:
        words_dict[word] += 1
    word = []

for k,v in words_dict.items():
    print(k,v)

第二版:

缺点:遇到大文件要一次读入内存,性能不好

path = ‘test.txt‘
with open(path,‘r‘,encoding=‘utf-8‘) as f:
    data = f.read()
    word_reg = re.compile(r‘\w+‘)
    #word_reg = re.compile(r‘\w+\b‘)
    word_list = word_reg.findall(data)
    word_list = [word.lower() for word in word_list] #转小写
    word_set = set(word_list)  #避免重复查询
    # words_dict = {}
    # for word in word_set:
    #     words_dict[word] = word_list.count(word)

    # 简洁写法
    words_dict = {word: word_list.count(word) for word in word_set}
    for k,v in words_dict.items():
        print(k,v)

第三版:

path = ‘test.txt‘
with open(path, ‘r‘, encoding=‘utf-8‘) as f:
    word_list = []
    word_reg = re.compile(r‘\w+‘)
    for line in f:
        #line_words = word_reg.findall(line)
        #比上面的正则更加简单
        line_words = line.split()
        word_list.extend(line_words)
    word_set = set(word_list)  # 避免重复查询
    words_dict = {word: word_list.count(word) for word in word_set}
    for k, v in words_dict.items():
        print(k, v)
时间: 2024-10-11 13:35:51

任一英文的纯文本文件,统计其中的单词出现个数的相关文章

统计字符串中单词的个数

1.单纯统计单词个数,单词与单词之间只考虑空格的情况 // word_statistic.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <string> using namespace std; #define M 10000 #define N 20 int _tmain(int argc, _TCHAR* argv[]) { char str1[M]={0};

Python 基础 - 统计文本里单词的个数以及出现的次数

# -*- coding:utf-8 -*- #author:V def tol (file1,gui): #写一个方法,定义文件,or 匹配规则 import re patt = re.compile(gui) #print(type(patt)) f = open(file1,'r') #print(type(f)) try: return len(patt.findall(f.read())) #findall接受str类型,之前我把file 类型房间去,结果傻逼了 finally: #不

第0004道练习题_Python统计文本里单词出现次数

Python练习题第 0004 题 https://github.com/Show-Me-the-Code/show-me-the-code 第 0004 题:任一个英文的纯文本文件,统计其中的单词出现次数. Talk is cheap, show you my code. #! /usr/bin/env python #! -*- coding: utf-8 -*- from collections import OrderedDict __author__ = 'Sophie' class

简单的方法来统计文件中单词和各种标点符号个数

此小程序使用最基本的方法来统计文本中英文单词的个数,想法也比较简单: (1)从文本中文本读取内容,使用BufferedReader类每次读取一行并添加到StringBuffer类型变量中, 最后StringBuffer类型变量即为文本的内容,如StringBuffer sb: (2)把sb的内容全部转化成小写字母(或大写字母): (3)统计文件中各种标点符号个数: (4)把所有标点符号统一替换成一种标点符号,如替换成逗号 (5)替换后的文本使用字符串的分割函数来获取返回的字符串数组的长度,此长度

配置文件格式用哪个?文件夹+纯文本文件,XML,SQLite

稍具规模的软件都会须要一个配置文件来支持软件的执行.眼下常见的配置文件格式有纯文本.XML.SQLite.自己定义二进制格式,怎样进行选择呢? 1 纯文本--永远不会失效的文件格式 文本化是传统Unix哲学的教条之中的一个,可见其巨大威力.大多数类Unix系统的软件配置文件都是採用了纯文本格式. 比如/etc/inittab, /etc/fstab, httpd.conf等等. 1.1 长处 (1)可读性强 配置文件不仅须要让机器理解,也须要让人理解. 纯文本就很easy让人理解. (2)存在大

一本英文小说的词频统计

对<达芬奇密码(The Da Vinci Code)>统计了各单词的出现次数(人名地名不参与统计). 全书约12.5万字(words),出现了10240个单词,其中只有1559个单词出现了10次以上. 出现2000次以上的单词,4个:the, of, to, and 出现1000次以上的单词,12个. 出现500次以上的单词,22个. 出现100次以上的单词,148个. 出现50次以上的单词,333个. 出现30次以上的单词,551个. 出现20次以上的单词,808个. 出现10次以上的单词,

[转]PHP判断字符串是纯英文、纯汉字或汉英混合(GBK)

PHP判断字符串是否为中文(或英文)的方法,除了正则表达式判断和拆分字符判断字符的值是否小于128 外还有一种比较特别的方法. 使用php中的mb_strlen和strlen函数判断 方法比较简单:分别使用以上两个函数以当前编码测出字符的返回值,然后比较返回值.返回值相等的为纯英文.纯数字.英数混排:返回值不等,且strlen返回值可被mb_strlen整除的为纯汉字返回值不等,且strlen返回值不可被mb_strlen整除的为英汉或数汉混排 看一下以下的例子: Php代码   <?php $

统计一段文章的单词频率,取出频率最高的5个单词和个数(python)

练习题:统计一段英语文章的单词频率,取出频率最高的5个单词和个数(用python实现) 怎么判定单词?1 不是字母的特殊字符作为分隔符分割字符串 (避免特殊字符的处理不便,全部替换成'-')2 遍历字符串,取每个word3 正则匹配 怎么统计个数?将wordlist的word和word的个数放入dict,排序 ''' dinghanhua 2018-11-11 练习:一段英文文章,统计每个单词的频率,返回出现频率最高的5个单词和次数 ''' import re art = ' If we wan

统计数组中重复元素个数

/** * 循环统计数组或集合中的重复元素个数 * @param args */ public static void main(String[] args) { Map<String, Integer> map = new HashMap<String, Integer>(); String[] ss = {"白","黑","绿","白"}; for (int i = 0; i < ss.len