按照文件中每个词出现的次数进行排序

Python

要求:

1. 任给一篇中文文档,用open函数打开得到一个字符串。

2.用 jieba.cut函数对这个字符串进行中文分词。

3.用字符串的count方法统计每个单词在这个字符串中出现的次数。

4.用列表的sort方法,按每个单词出现的次数进行排序。

5.用for--in语句输出结果

代码:

import jieba
f=open("D:\字符串.txt","r",encoding='utf-8')
st=f.read()
print(st)
print('-----统计每个单词出现的次数------')
total=set(jieba.cut(st))  #将分词的结果转换为集合赋值给total
print('单词总量=',len(total),'个')
words=[(word,st.count(word))for word in total]
words.sort(key=lambda p:p[1],reverse=True)#排序
i=1
for w,c in words:
    print(i,w,'出现',c,'次')
    i=i+1

代码分析:

import jieba

导入jieba库,jieba库的作用,进行中文分词,能够将中文文本按照词语进行切分。例如,对于句子 “今天天气很好”,可以切分为 “今天”“天气”“很好” 等词语

注意安装jieba库:

windows+r  输入进入命令字 输入 pip install jieba安装jieba库

输入python 回车 import jieba 没有报错就是安装成功了

如果!!!jieba安装成功仍然显示找不到此类

方法如下:

将以下两个文件

复制到你写的代码文件保存的地方

类似于

这样就不会显示找不到了

total=set(jieba.cut(st))

将分词的结果转换为集合赋值给total;

转换为集合是为了利用集合可以去重的特点来统计单词出现的个数

words=[(word,st.count(word))for word in total]

其作用是创建一个列表,列表中的每个元素是一个元组,元组包含一个单词和这个单词在变量total中出现的次数。

word,st.count(word):这里创建了一个元组,第一个元素是当前遍历到的单词word,第二个元素是调用st.count(word)方法得到的结果,该方法应该是一个自定义函数或者某个模块中的函数,用于计算单词word在特定对象中的出现次数。

words.sort(key=lambda p:p[1],reverse=True)

words.sort()函数调用是对列表words进行排序,默认升序

key=lambda p:p[1]用于指定排序的依据。在这里,使用了匿名函数(lambda 表达式)来定义排序的键。lambda p:p[1]表示对于列表中的每个元素p取其第二个元素作为排序的依据。

reverse=True 这也是一个关键字参数,用于指定排序的顺序为降序。如果不设置这个参数,默认是升序排序。

运行结果:

下面是一个Java程序,可以实现统计文本文件文字符出现次数并按照出现次数排序的功能: ```java import java.io.*; import java.util.*; public class ChineseCharCount { public static void main(String[] args) { String filename = "test.txt"; // 待统计的文件名 Map<Character, Integer> charMap = new HashMap<>(); // 用于存储文字符和出现次数的映射 try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filename), "UTF-8"))) { String line; while ((line = reader.readLine()) != null) { for (int i = 0; i < line.length(); i++) { char c = line.charAt(i); if (isChineseChar(c)) { Integer count = charMap.get(c); if (count == null) { charMap.put(c, 1); } else { charMap.put(c, count + 1); } } } } } catch (IOException e) { e.printStackTrace(); } List<Map.Entry<Character, Integer>> charList = new ArrayList<>(charMap.entrySet()); // 将映射转换为列表 charList.sort((e1, e2) -> e2.getValue().compareTo(e1.getValue())); // 按照出现次数从大到小排序 for (Map.Entry<Character, Integer> entry : charList) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } // 判断一个字符是否为文字符 private static boolean isChineseChar(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS; } } ``` 程序首先读取指定的文本文件,逐行遍历文件每个字符,如果一个字符是文字符,则将其加入到一个映射,并记录其出现次数。最后,将映射转换为列表并按照出现次数从大到小排序,输出结果。 程序使用了`isChineseChar`方法来判断一个字符是否为文字符,该方法判断的依据是该字符所属的`UnicodeBlock`是否为文字符所使用的`UnicodeBlock`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值