需要对大量中文文本进行分词,获取词频较高的关键词,所以学习研究了jieba、thulac和pkuseg三种python分析工具和官方文档。在这个过程中,建立了用户自定义的词典和停用词。现将中文分词这部分进行总结,分享给大家,希望对大家能有帮助。
系统:Win10
软件:python3
对于分词不太了解的同学,建议先去看看这三个链接,学习下基础的用法。
官方jieba中文分词python版文档链接
官方thulac中文分词python版文档链接
官方pkuseg中文分词Python版文档链接
停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。比如,“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停用词。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词库。
停用词库建立:
方法1:网上找了很多个常用的中文停用词库, 并没有一个明确的停用词表能够适用于所有的工具 ,我的做法是将这些文件中的停用词合并去重,得到了目前在用的、相对来说比较全的停用词库。
方法2: 通过对大量的中文文本进行分词,求频率最高的关键词,将这些高频出现的关键词中需要去掉的词放在停用词库,这样多做几次,停用词库的就相对完整了。
用法:
# 获取停用词list
stopwords = [line.strip() for line in open('./StopWords.txt').readlines()]
开发者可以指定自己自定义的词典,以便包含分词工具(如:jieba)词库里没有的词。虽然现在的分词工具有新词识别能力,但是自行添加新词可以保证更高的正确率 。
词典格式是一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略),用空格隔开
自定义的词典建立
方法1:可从网上找所属行业的词库,放在自定义的词典库中
方法2:可通过业务整理总结出该行业相关的专有词,放在自定义词典库中
导入自定义词典用法:
jieba.load_userdict(file_name) # file_name为自定义词典的路径
thul = thulac.thulac(user_dict=file_name, seg_only=True) # 在默认模式下,导入用户词典
pku_seg = pkuseg.pkuseg(user_dict=file_name)
采用分词工具jieba、thulac和pkuseg分别进行分词,并获取高频出现的top10的关键词。
jieba代码:
import jieba
import operator
data="""计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。
由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。可分为超级计算机、工业控制计算机、网络计算机、个人计算机、嵌入式计算机五类,较先进的计算机有生物计算机、光子计算机、量子计算机等。
计算机发明者约翰·冯·诺依曼。计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域,已形成了规模巨大的计算机产业,带动了全球范围的技术进步,由此引发了深刻的社会变革,计算机已遍及一般学校、企事业单位,进入寻常百姓家,成为信息社会中必不可少的工具。
计算机的应用在中国越来越普遍,改革开放以后,中国计算机用户的数量不断攀升,应用水平不断提高,特别是互联网、通信、多媒体等领域的应用取得了不错的成绩。1996年至2009 年,计算机用户数量从原来的630万增长至6710 万台,联网计算机台数由原来的2.9万台上升至5940万台。互联网用户已经达到3.16 亿,无线互联网有6.7 亿移动用户,其中手机上网用户达1.17 亿,为全球第一位。"""
# 导入自定义词典
jieba.load_userdict('./user_dict.txt')
# 获取停用词list
stopwords = [line.strip() for line in open('./StopWords.txt').readlines()]
# 用jieba进行分词
words_jieba = jieba.cut(data)
# 删除分词中的空格
words_jieba = [line.strip() for line in words_jieba] # 删除jieba空格
# 删除停用词
words_jieba = [w for w in words_jieba if
w not in set(stopwords)] # 删除停止词后的分词
jieba_key_words_dict = {}
for w in words_jieba:
jieba_key_words_dict[w] = jieba_key_words_dict.get(w, 0) + 1
# reverse降序排序字典
jieba_key_words_dict = sorted(jieba_key_words_dict.items(),
key=operator.itemgetter(1), reverse=True)
len_top = 10
if len_top > len(jieba_key_words_dict):
len_top = len(jieba_key_words_dict)
item_key_words = []
for i in range(len_top):
item_key_words.append(jieba_key_words_dict[i][0])
item_key_words.append(jieba_key_words_dict[i][1])
print(jieba_key_words_dict[i][0],jieba_key_words_dict[i][1])
jieba输出结果:
计算机 8
计算 3
互联网 3
万台 3
亿 3
高速 2
先进 2
社会 2
全球 2
计算机用户 2
thulac代码:
import thulac
import pandas as pd
import operator
data="""计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。
由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。可分为超级计算机、工业控制计算机、网络计算机、个人计算机、嵌入式计算机五类,较先进的计算机有生物计算机、光子计算机、量子计算机等。
计算机发明者约翰·冯·诺依曼。计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域,已形成了规模巨大的计算机产业,带动了全球范围的技术进步,由此引发了深刻的社会变革,计算机已遍及一般学校、企事业单位,进入寻常百姓家,成为信息社会中必不可少的工具。
计算机的应用在中国越来越普遍,改革开放以后,中国计算机用户的数量不断攀升,应用水平不断提高,特别是互联网、通信、多媒体等领域的应用取得了不错的成绩。1996年至2009 年,计算机用户数量从原来的630万增长至6710 万台,联网计算机台数由原来的2.9万台上升至5940万台。互联网用户已经达到3.16 亿,无线互联网有6.7 亿移动用户,其中手机上网用户达1.17 亿,为全球第一位。"""
# 获取停用词list
stopwords = [line.strip() for line in open('./StopWords.txt').readlines()]
# 用thulac进行分词
thu1 = thulac.thulac(user_dict='./user_dict.txt', seg_only=True) # 在默认模式下,导入用户词典
words= thu1.cut(data, text=False)
words = pd.DataFrame(words)
words_thulac = words.iloc[:, 0]
words_thulac = [line.strip() for line in words_thulac] # 删除thulac空格
words_thulac = [w for w in words_thulac if
w not in set(stopwords)] # 删除停用词
thulac_key_words_dict = {}
for w in words_thulac:
thulac_key_words_dict[w] = thulac_key_words_dict.get(w, 0) + 1
# reverse降序排序字典
thulac_key_words_dict = sorted(thulac_key_words_dict.items(),
key=operator.itemgetter(1), reverse=True)
len_top = 10
if len_top > len(thulac_key_words_dict):
len_top = len(thulac_key_words_dict)
print("thulac10关键词:\n")
item_key_words = []
for i in range(len_top):
item_key_words.append(thulac_key_words_dict[i][0])
item_key_words.append(thulac_key_words_dict[i][1])
print(thulac_key_words_dict[i][0],thulac_key_words_dict[i][1])
thulac输出结果:
计算机 8
社会 4
计算 3
互联网 3
台 3
用户 3
亿 3
高速 2
先进 2
活动 2
pkuseg代码下载链接:
import pkuseg
import operator
data="""计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。
由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。可分为超级计算机、工业控制计算机、网络计算机、个人计算机、嵌入式计算机五类,较先进的计算机有生物计算机、光子计算机、量子计算机等。
计算机发明者约翰·冯·诺依曼。计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域,已形成了规模巨大的计算机产业,带动了全球范围的技术进步,由此引发了深刻的社会变革,计算机已遍及一般学校、企事业单位,进入寻常百姓家,成为信息社会中必不可少的工具。
计算机的应用在中国越来越普遍,改革开放以后,中国计算机用户的数量不断攀升,应用水平不断提高,特别是互联网、通信、多媒体等领域的应用取得了不错的成绩。1996年至2009 年,计算机用户数量从原来的630万增长至6710 万台,联网计算机台数由原来的2.9万台上升至5940万台。互联网用户已经达到3.16 亿,无线互联网有6.7 亿移动用户,其中手机上网用户达1.17 亿,为全球第一位。"""
# 获取停用词list
stopwords = [line.strip() for line in open('./StopWords.txt').readlines()]
# 用pkuseg进行分词
# 额外使用用户自定义词典
seg = pkuseg.pkuseg(user_dict='./user_dict.txt')
words_pkuseg = seg.cut(data)
words_pkuseg = [line.strip() for line in words_pkuseg] # 删除thulac空格
words_pkuseg = [w for w in words_pkuseg if
w not in set(stopwords)] # 删除停用词
pkuseg_key_words_dict = {}
for w in words_pkuseg:
pkuseg_key_words_dict[w] = pkuseg_key_words_dict.get(w, 0) + 1
# reverse降序排序字典
pkuseg_key_words_dict = sorted(pkuseg_key_words_dict.items(),
key=operator.itemgetter(1), reverse=True)
len_top = 10
if len_top > len(pkuseg_key_words_dict):
len_top = len(pkuseg_key_words_dict)
item_key_words = []
for i in range(len_top):
item_key_words.append(pkuseg_key_words_dict[i][0])
item_key_words.append(pkuseg_key_words_dict[i][1])
print(pkuseg_key_words_dict[i][0],pkuseg_key_words_dict[i][1])
pkuseg输出结果
计算机 7
计算 3
社会 3
互联网 3
台 3
用户 3
亿 3
高速 2
先进 2
技术 2
为了获取的高频关键词能更接近真实结果,结合三种分词工具(jieba、thualc、pkuseg)同时做分词,输出词频较高的top10关键词。
jieba、thulac和pkuseg的代码:
import jieba
import thulac
import pkuseg
import pandas as pd
import operator
data="""计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。
由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。可分为超级计算机、工业控制计算机、网络计算机、个人计算机、嵌入式计算机五类,较先进的计算机有生物计算机、光子计算机、量子计算机等。
计算机发明者约翰·冯·诺依曼。计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域,已形成了规模巨大的计算机产业,带动了全球范围的技术进步,由此引发了深刻的社会变革,计算机已遍及一般学校、企事业单位,进入寻常百姓家,成为信息社会中必不可少的工具。
计算机的应用在中国越来越普遍,改革开放以后,中国计算机用户的数量不断攀升,应用水平不断提高,特别是互联网、通信、多媒体等领域的应用取得了不错的成绩。1996年至2009 年,计算机用户数量从原来的630万增长至6710 万台,联网计算机台数由原来的2.9万台上升至5940万台。互联网用户已经达到3.16 亿,无线互联网有6.7 亿移动用户,其中手机上网用户达1.17 亿,为全球第一位。"""
# 获取停用词list
stopwords = [line.strip() for line in open('./StopWords.txt').readlines()]
# 用jieba进行分词
jieba.load_userdict('./user_dict.txt') # 导入自定义词典
words_jieba = jieba.cut(data)
# 用thulac进行分词
thul = thulac.thulac(user_dict='./user_dict.txt', seg_only=True) # 在默认模式下,导入用户词典
words = thul.cut(data, text=False) # 输出为[['计算机',''],['计算',''],...]
words = pd.DataFrame(words)
words_thulac = words.iloc[:, 0]
# 用pkuseg进行分词
pku_seg = pkuseg.pkuseg(user_dict='./user_dict.txt') # 使用用户自定义词典
words_pkuseg = pku_seg.cut(data)
# 删除分词中的空格
words_jieba = [line.strip() for line in words_jieba] # 删除jieba空格
words_thulac = [line.strip() for line in words_thulac] # 删除thulac空格
words_pkuseg = [line.strip() for line in words_pkuseg] # 删除thulac空格
# 删除停用词
words_jieba = [w for w in words_jieba if
w not in set(stopwords)] # 删除停用词
words_thulac = [w for w in words_thulac if
w not in set(stopwords)] # 删除停用词
words_pkuseg = [w for w in words_pkuseg if
w not in set(stopwords)] # 删除停用词
key_words_dict = {}
for w in words_jieba:
key_words_dict[w] = key_words_dict.get(w, 0) + 1
for w in words_thulac:
key_words_dict[w] = key_words_dict.get(w, 0) + 1
for w in words_pkuseg:
key_words_dict[w] = key_words_dict.get(w, 0) + 1
# reverse降序排序字典
key_words_dict = sorted(key_words_dict.items(),
key=operator.itemgetter(1), reverse=True)
len_top = 10
if len_top > len(key_words_dict):
len_top = len(key_words_dict)
item_key_words = []
for i in range(len_top):
item_key_words.append(key_words_dict[i][0])
item_key_words.append(key_words_dict[i][1])
print(key_words_dict[i][0],key_words_dict[i][1])
jieba、thulac和pkuseg输出结果:
计算机 23
计算 9
社会 9
互联网 9
亿 9
用户 8
高速 6
先进 6
全球 6
计算机用户 6
本文通过三种中文分词工具(jieba、thualc、pkuseg)来进行分词,现在有越来越多的中文分词工具了,大家有时间可以都尝试下。