Python中文词汇与英文词频统计

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 本文介绍了如何使用Python进行英文和中文词频统计。对于英文,借助内置库按空格分隔单词并处理特殊字符;对于中文,需安装jieba分词库。代码实现中,通过读取文件、分词、统计词频并输出到文件。运行时,通过命令行提供文本和结果文件路径。此技能在学术研究、语言分析和文本挖掘领域颇有价值。

1.如何统计英文单词和中文词语的词频?

本篇文章是如何使用Python统计英文文本中单词的词频和中文词语的词频。你是不是遇到过需要对大量中文文本进行分析的情况?比如,你想要分析一篇英文文章或一本中文小说中出现频率最高的词汇是哪些?无论是在学术研究、语言分析还是文本挖掘方面,统计词频都是一项非常有用的技能。让我们一起来探索这个有趣又有用的主题吧!

2.准备工作

(1)英文词频统计

因为本次使用的代码使用的库为python的内置库,所以直接进行导入即可

(2)中文词汇统计

首先,我们需要安装jieba包,这是一个开源的中文分词工具。

pip install jieba

接下来,我们需要准备一篇中文文本作为分析的对象。你可以使用自己的中文文本。

3.分析原理

英文分析

在进行单词词频统计之前,我们需要了解一下具体的分析原理。对于英文文本,我们可以按照空格来分隔单词。但是需要注意的是,可能会有一些标点符号、换行符等特殊字符,这些字符并不属于单词本身。因此,在分割单词之前,我们需要对文本进行一些预处理工作,例如删除特殊字符和标点符号。

在Python中,我们可以使用正则表达式模块re来进行文本处理。通过使用re模块的split()函数,我们可以按照非单词字符进行分割,得到一个单词列表。然后,我们可以遍历这个单词列表,统计每个单词出现的次数,并将结果存储在一个字典中。

中文分析

中文文本的词语之间并没有像英文那样的空格来进行分隔,所以我们需要进行一些额外的步骤来实现中文词频统计。

首先,我们可以使用Python中的中文分词库,例如jieba,来进行中文文本的分词。通过jieba库的cut()函数,我们可以将中文文本分割为一个个词语,得到一个词语列表。然后,我们可以遍历这个词语列表,统计每个词语出现的次数,并将结果存储在一个字典中。

需要注意的是,我们还需要处理一些特殊情况,例如标点符号、停用词等。本文并没有对文本进行停用词处理,但是给出方法,对于标点符号,我们可以使用正则表达式来进行过滤。而停用词则是那些在分析时不具有实际意义的常用词语,例如“的”、“了”等。我们可以在分词后,去除这些停用词,以提高词频统计的准确性。

4.代码实现

本文在代码实现方面对代码进行了很多注释,方便理解和学习

(1)英文词频实现代码

下面是我们使用Python实现的代码,来帮助我们统计英文单词的词频:

import sys
import re


# countFile函数用于统计文件中的单词频率。它接受两个参数:filename表示要统计的文件名,words表示存储统计结果的字典。
def countFile(filename, words):
    # 函数首先尝试打开文件并读取内容。如果文件不存在或打开失败,会抛出异常并返回0
    try:
        f = open(filename, "r", encoding="gbk")  # 打开文件以读取内容,使用gbk编码
    except Exception as e:  # 如果文件不存在或打开失败,会抛出异常并返回0。
        print(e)
        return 0

    text = f.read()  # 将文件内容全部读取为字符串
    f.close()

    lst = re.split(r"\W+", text)  # 将文本(text)按非单词字符(\W)进行分割,并将结果保存在lst列表中(获得单词列表)。
    for word in lst:
        if word == "":  # 如果单词为空字符串,跳过该单词继续循环。
            continue
        wx = word.lower()  # lower()将单词转换为小写,便于统一防止计算错误,因为如果不统一大小写形式,这两个相同的单词将被视为两个不同的单词
        if wx in words:
            words[wx] += 1  # 如果在词典中已存在该单词,则频率加1
        else:
            words[wx] = 1  # 如果词典中不存在该单词,则将其添加,并设置频率为1

    return 1  # 表示统计成功


# 统计指定文件的单词频率,将结果存入result字典
result = {
   
   }  # 存储统计结果的字典,格式为{"单词":频率}
if countFile(sys.argv[1], result) == 0:  # 调用 countFile 函数,传入命令行参数 sys.argv[1] (表示统计的文件路径)和 result 字典。
    exit()  # 如果 countFile 返回值为 0,即统计失败,则执行 exit() 函数结束程序。

# 文件进行处理以达到需要处理   ”单词“: 词频  的效果
lst = list(result.items())  # 将result字典转换为列表形式:通过调用result.items()方法,会返回一个可迭代对象,
# 其中包含了 result 字典中的所有键值对。每个键值对以元组的形式表示.例如:[("apple", 3), ("banana", 2), ("orange", 1)]
lst.sort()  # 按照字典顺序对单词进行排序:sort() 方法是一种原地排序,也就是说它会直接修改原列表的顺序,而不会创建一个新的排序后的列表。

f = open(sys.argv[2], "w")  # 打开结果文件以写入结果
for word, frequency in lst:
    f.write("%s\t%d\n" % (word, frequency))  # 将单词及其频率写入文件
f.close()  # 关闭文件

image.png
image.png

(2)中文词频代码实现

下面是我们使用Python实现的代码,来帮助我们统计中文的词频:
统计中文词频,与统计英文类似,只是在分词时使用的方法不同

import sys
import jieba


def countFile(filename, words):
    try:
        f = open(filename, "r", encoding="utf-8")  # 打开文件以读取内容,使用utf-8编码
    except Exception as e:
        print(e)
        return 0

    txt = f.read()  # 将文件内容全部读取为字符串
    f.close()

    seg_list = jieba.lcut(txt)  # 使用结巴分词将文本分割为词语列表

    for word in seg_list:
        if word.strip() == "":
            continue

        if word in words:
            words[word] += 1  # 如果在词典中已存在该词语,则频率加1
        else:
            words[word] = 1  # 如果词典中不存在该词语,则将其添加,并设置频率为1

    return 1


result = {
   
   }  # 存储统计结果的字典,格式为{"词语":频率}
if countFile(sys.argv[1], result) == 0:  # 统计指定文件的词语频率,将结果存入result字典
    exit()

lst = list(result.items())  # 将result字典转换为列表形式
lst.sort()  # 按照字典顺序对词语进行排序

f = open(sys.argv[2], "w", encoding="utf-8")  # 打开结果文件以写入结果
for word, frequency in lst:
    f.write("%s\t%d\n" % (word, frequency))  # 将词语及其频率写入文件
f.close()  # 关闭文件

image.png
image.png

5.使用方法

在你的系统上保存以上代码为自己命名的.py文件,并准备一篇中文文本和英文文件,然后,打开命令提示符或终端,运行以下命令:

python`自己命名的.py 需要处理的文本.txt result.txt

这个命令将会将词频统计结果保存在result.txt文件中。代码中使用命令行参数进行编写,这样做可以直接使用命令进行,无需打开pycharm方便好用.

6.总结

通过这篇文章,自己练习了如何使用Python来统计英文文本和中文小说中的词频。通过使用正则表达式来处理文本,并使用字典来存储和计算词频,让我能够更好地理解文本中的词汇使用情况。这对于学术研究、语言分析和文本挖掘都非常有帮助。

版权声明:本文为本博主在CSDN的原创文章搬运而来,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文首发链接为:https://blog.csdn.net/weixin_72543266/article/details/132069111

相关文章
|
3月前
|
数据采集 自然语言处理 搜索推荐
python【包含数据预处理】基于词频生成词云图
背景目的 有一篇中文文章,或者一本小说。想要根据词频来生成词云图。
|
4月前
|
存储 运维 数据挖掘
Python列表中每个元素前面连续重复次数的数列统计
Python列表中每个元素前面连续重复次数的数列统计
35 1
|
2月前
|
数据采集 自然语言处理 大数据
​「Python大数据」词频数据渲染词云图导出HTML
使用Python,本文展示数据聚类和办公自动化,焦点在于通过jieba分词处理VOC数据,构建词云图并以HTML保存。`wordCloud.py`脚本中,借助pyecharts生成词云,如图所示,关键词如"Python"、"词云"等。示例代码创建了词云图实例,添加词频数据,并输出到"wordCloud.html"。
58 1
​「Python大数据」词频数据渲染词云图导出HTML
|
2月前
|
数据可视化 数据挖掘 定位技术
Seaborn统计图表指南
【7月更文挑战第12天】Seaborn是Python的数据可视化库,基于Matplotlib,提供美观的统计图形。要开始使用,需通过`pip install seaborn`安装。它支持多种图表,如分布图、热图、聚类图、箱线图、小提琴图、联合分布图、点图、多变量分布图、线性关系图、树地图、时间序列图、分面绘图、分类数据图、分布对比图、多变量图和气泡图等,适用于复杂数据分析和展示。Seaborn简化了创建这些高级图表的过程,使数据可视化更直观和高效。
49 5
|
3月前
|
数据采集 自然语言处理 搜索推荐
python 【包含数据预处理】基于词频生成词云图
这段文本是关于如何使用Python基于词频生成词云图的教程。内容包括:1) 中文分词的必要性,因中文无明显单词边界及语言单位特性;2) 文本预处理步骤,如移除特殊符号、网址、日期等;3) 使用`data_process`函数清除无用字符;4) `getText`函数读取并处理文本为句子数组;5) 使用jieba分词库进行分词和词频统计;6) 示例代码展示了从分词到生成词云的完整流程,最后展示生成的词云图。整个过程旨在从中文文本中提取关键词并可视化。
90 5
python 【包含数据预处理】基于词频生成词云图
|
3月前
|
存储 数据挖掘 Python
使用Python集合高效统计Excel数据
使用Python集合高效统计Excel数据
56 7
|
3月前
|
监控 数据可视化 数据库
【python项目推荐】键盘监控--统计打字频率
【python项目推荐】键盘监控--统计打字频率
64 13
|
2月前
|
数据可视化 Python
时间序列分析是一种统计方法,用于分析随时间变化的数据序列。在金融、经济学、气象学等领域,时间序列分析被广泛用于预测未来趋势、检测异常值、理解周期性模式等。在Python中,`statsmodels`模块是一个强大的工具,用于执行各种时间序列分析任务。
时间序列分析是一种统计方法,用于分析随时间变化的数据序列。在金融、经济学、气象学等领域,时间序列分析被广泛用于预测未来趋势、检测异常值、理解周期性模式等。在Python中,`statsmodels`模块是一个强大的工具,用于执行各种时间序列分析任务。
|
2月前
|
数据可视化 Linux 数据格式
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
Python----统计字符串中的英文字母、空格、数字和其它字符的个数。
Python----统计字符串中的英文字母、空格、数字和其它字符的个数。