通过中文分词获取关键词

通过中文分词获取关键词

​ 需要对大量中文文本进行分词,获取词频较高的关键词,所以学习研究了jieba、thulac和pkuseg三种python分析工具和官方文档。在这个过程中,建立了用户自定义的词典和停用词。现将中文分词这部分进行总结,分享给大家,希望对大家能有帮助。

环境说明

系统:Win10
软件:python3

1. 官方链接文档

​ 对于分词不太了解的同学,建议先去看看这三个链接,学习下基础的用法。

官方jieba中文分词python版文档链接

官方thulac中文分词python版文档链接

官方pkuseg中文分词Python版文档链接

2. 停用词库建立

​ 停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。比如,“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停用词。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词库。

停用词库建立:

方法1:网上找了很多个常用的中文停用词库, 并没有一个明确的停用词表能够适用于所有的工具 ,我的做法是将这些文件中的停用词合并去重,得到了目前在用的、相对来说比较全的停用词库。

方法2: 通过对大量的中文文本进行分词,求频率最高的关键词,将这些高频出现的关键词中需要去掉的词放在停用词库,这样多做几次,停用词库的就相对完整了。

用法:

# 获取停用词list
stopwords = [line.strip() for line in open('./StopWords.txt').readlines()]

3. 自定义词典

​ 开发者可以指定自己自定义的词典,以便包含分词工具(如: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)

4. 获取关键词

​ 采用分词工具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)来进行分词,现在有越来越多的中文分词工具了,大家有时间可以都尝试下。

你可能感兴趣的:(中文分词)