Python jieba 是一个开源的中文分词工具包,可以帮助我们把文本切分为单个单词或词语,准确地计算文本中各个词语的出现频率,是进行中文自然语言处理的重要基础工具之一。以下是 Python jieba 中文分词与词频统计的操作攻略:
安装与引入
在Python中,安装jieba很简单,只需要在控制台运行 pip install jieba
即可。引入jieba库的方式有以下两种:
import jieba
或
import jieba.analyse as analyse
总分词函数
在进行分词操作前,我们需要先定义一个总分词函数,用于将文本数据中的标点符号、停用词等杂乱数据清洗掉后进行分词操作。如下所示:
import re
import jieba
def cut_words(string):
# 正则表达式去除多余符号
string = re.sub('\s+', ' ', string)
string = re.sub('\(.*?\)+', '', string)
string = re.sub('[^a-zA-Z\u4E00-\u9FA5]', '', string)
words = jieba.cut(string)
# stopwords为停用词,需要自己准备
stopwords = [line.strip() for line in open('stopwords.txt')]
# 剔除停用词,只保留有效单词
result = []
for word in words:
if word not in stopwords:
result.append(word)
return result
在这个函数中,我们先通过正则表达式去掉字符串中多余的空格和标点符号,再使用jieba.cut()函数对文本进行分词,最后通过循环去掉停用词,只保留有效单词。
词频统计函数
在进行分词操作后,我们需要统计每个单词在文本中出现的频率。可以编写如下的词频统计函数:
def get_word_frequency(word_list):
word_count = {}
for word in word_list:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
return sorted(word_count.items(), key = lambda kv:(kv[1], kv[0]), reverse=True)
在这个函数中,我们先创建一个空字典word_count,用于存储每个单词的出现次数。然后遍历word_list中的每个单词,如果该单词已经在word_count中出现过,就将其出现次数+1;否则就将该单词加入word_count中,并给其出现次数赋值为1。
最后,我们通过sorted()函数对word_count中的每个键值对进行排序,其中按照value值从大到小排序,如果value相同则按照key值从小到大排序。
示例一
我们有一段中文文本“这是一个测试文本,用于测试Python jieba库的分词和词频统计功能。”,我们来对其进行分词和词频统计:
text = '这是一个测试文本,用于测试Python jieba库的分词和词频统计功能。'
# 进行分词
word_list = cut_words(text)
# 词频统计
word_frequency = get_word_frequency(word_list)
print("该文本中单词总数为:", len(word_list))
print("词频统计结果为:", word_frequency)
输出结果如下:
该文本中单词总数为: 9
词频统计结果为: [('测试', 2), ('分词', 1), ('功能', 1), ('库', 1), ('Python', 1), ('jieba', 1), ('文本', 1), ('词频', 1), ('用于', 1)]
可以看到,该文本一共有9个有效单词,其中出现最多的单词是“测试”,共出现2次。
示例二
我们有一篇中文新闻报道“2019年大陆观光旅游禁令取消,台湾旅游业界反应冷淡”,我们来对其进行分词和词频统计:
news = """2019年大陆观光旅游禁令取消,台湾旅游业界反应冷淡。据台湾媒体报道,2019年8月1日,大陆政府正式宣布取消对居住证持有者到台湾旅游的限制,允许更多大陆民众前往台湾旅游。然而业内人士预测,该政策的实施对于台湾旅游产业来说,恐怕带来的是不小的冲击。"""
# 进行分词
word_list = cut_words(news)
# 词频统计
word_frequency = get_word_frequency(word_list)
print("该文本中单词总数为:", len(word_list))
print("词频统计结果为:", word_frequency[:10])
输出结果如下:
该文本中单词总数为: 44
词频统计结果为: [('台湾', 3), ('旅游', 2), ('大陆', 2), ('政策', 1), ('宣布', 1), ('取消', 1), ('居住证', 1), ('持有者', 1), ('限制', 1), ('允许', 1)]
可以看到,文本新闻中出现最多的单词是“台湾”,共出现了3次,其次是“旅游”和“大陆”,各出现了2次,这些关键词对于这篇新闻来说是非常重要的。
综上,通过Python jieba中文分词与词频统计的操作,可以帮助我们更好地理解中文文本的特点,并提取出文本中的重要信息,是进行自然语言处理和文本挖掘的不可或缺的工具之一。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python jieba 中文分词与词频统计的操作 - Python技术站