当前位置:首页 期刊杂志

中文文本分词及其可视化技术研究

时间:2024-05-04

石凤贵

(马鞍山师范高等专科学校软件工程系,马鞍山243041)

0 引言

随着大数据和人工智能的快速发展,大数据和人工智能给人们学习、工作和生活带来了居多便利。分词是分析处理文本数据的基础,广泛应用于很多领域,自然语言处理的预处理首要任务就是分词。自然语言处理包括信息检索、语音合成、文本分类、自动文摘等[1]。目前比较成熟的分词工具有:jieba、SnowNLP、THULAC、NLPIR 等。词云是一种以可视化的方式显示文本关键词的技术,在分词的基础上设计实现,根据关键词的词频使用不同的方式展示,以有兴趣、高效、形象的方式展示。

1 中文分词

中文语句是一种字符序列,由字和词构成,同一个字词在不同的语句中或在不同的文本中意义不同。计算机要准确理解文本,首先需要进行文本分词,按照一定的分词规则和算法对文本进行切分。分词就是依据某一规则和算法将文本中词切分出来,构成词列表,后续对文本的分析理解就是基于分词列表。分词算法主要包括基于字符串匹配、基于统计和基于理解三类。

1.1 中文分词的复杂性

首先,中文语句中词与词之间没有明显的分隔标志,不像英文语句中词与词之间通过空格进行分隔。其次,中文中字词和短语无论是字数、结构、构成方面没有明显的界线,容易产生不同的切分结果。其三,中文词在不同的文本环境中表达的意思不同,而且一个中文词具有多种意思,容易产生歧义。其四,实体名词如人名、地名、机构名、商品名、简称等难易识别切分,另外网络上和新媒体环境下经常会出现一些新词、网络流行用语,行业领域具有行业专业术语,这些词难易识别和全面识别。其五,切出来的字词长度也影响分词效果[2]。

1.2 jieba分词工具

jieba 为一款被广泛使用的Python 第三方中文分词库,Python 提供了jieba 分词接口。jieba 中文分词工具算法简单、准确率高,适合于中文分词,支持三种分词模式,功能强大。jieba 功能结构图如图1 所示。

图1 jieba功能结果图

jieba 分词基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG),采用了动态规划查找最大概率路径,找出基于词频的最大切分组合。对于未登录词,采用了基于汉字成词能力的HMM 模型(Hidden Markov Model,隐马尔可夫模型),使用了Viterbi 算法[3]。

(1)分词

jieba 支持三种分词模式:精确模式,试图将句子最精确地切开,适合文本分析;全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词[3]。jieba 提供的分词方法如表1 所示。

(2)加载自定义词典

jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率,可以解决未登录词问题。用户可以自定义词典,添加默认词库中未包含的词。同时,自定义词典可以实现歧义消解。词典格式与默认词典一致,每个词一行,包括词语、词频(可省略)、词性(可省略)三部分,用空格隔开,顺序不能颠倒。加载词典采用如下方法:

除了自定义词典外,还可以调整默认词典:

(3)关键词提取

jieba 关键词提取有两种算法,一种是基于TF-IDF算法的关键词抽取,计算权重:

其中,sentence 为待提取的文本;topK 为返回几个TF-IDF 权重最大的关键词,默认值为20;withWeight为是否一并返回关键词权重值,默认值为False;allow-POS 仅包括指定词性的词,默认值为空,即不筛选。

另一种是基于TextRank 算法的关键词抽取,计算权重并排序:

表1 jieba 分词方法

(4)词性标注

新建自定义分词器,tokenizer 参数可指定内部使用的jieba.Tokenizer 分词器。标注句子分词后每个词的词性,采用和ictclas 兼容的标记法。

(5)并行分词

并行分词将目标文本按行分隔后,把各行文本分配到多个Python 进程并行分词,然后归并结果,从而获得分词速度的提升,基于Python 自带的multiprocessing模块,目前暂不支持Windows。

并行分词仅支持默认分词器jieba.dt 和jieba.posseg.dt。

(6)返回词语在原文的起止位置

2 词云

词云就是将文本中高频“关键词”以可视化的方式呈现,形象、生动、有趣,自动过滤低频词和非关键文本信息,直观、一目了然,不同的词采用不同的颜色表示。Python 中第三方库WordCloud 是一款广泛应用于词云展示的词云库。词云以词为基本单位,以文本中词出现频率作为参数生成,结果图形化显示。词云属性大小、颜色、形状等均可设置[4]。

每个词云是一个WordCloud 对象,生成词云一般按照三个步骤设置就可以,第一步定义词云对象并设置参数,使用wordcloud.WordCloud()实现;第二步生成词云,使用wordcloudObj.generate(text)或wordcloudobj.generate_from_frequencies(frequencies[,…]);第三步输出显示词云,使用matplotlib.pyplot 来显示词云,wordcloudObj.to_file(file_name)保存词云为图片文件。主要参数[5]见表2 所示。

表2 词云参数

本文以“十九大四中全会决定”语料进行实现展示。

3 实验实现

3.1 Python

Python 是一门目前广泛流行的计算机高级程序设计语言,在大数据、人工智能领域更是被广泛使用,大数据与人工智能正处于快速发展阶段,与Java、C、C++成为四大流行程序设计语言。Python 简洁、优美、开源、功能强大,许多社区提供了Python 技术的支持,第三方库数以万计。Python 广泛应用于桌面程序开发、Web 应用开发、自动化测试运维、爬虫、大数据处理、人工智能等各个领域,在IEEE Spectrum 发布的2017 和2018 年编程语言排行榜中位居第一。本文使用Python的第三方库jieba 和WordCloud 进行分词和生成词云[6]。

3.2 语料

十九届四中全会审议通过了《中共中央关于坚持和完善中国特色社会主义制度、推进国家治理体系和治理能力现代化若干重大问题的决定》,号召全党全国各族人民要更加紧密地团结在以***同志为核心的党中央周围,坚定信心,保持定力,锐意进取,开拓创新,为坚持和完善中国特色社会主义制度、推进国家治理体系和治理能力现代化,实现“两个一百年”奋斗目标、实现中华民族伟大复兴的中国梦而努力奋斗[7]。本文以十九届四中全会决定为语料生成词云,直观、图形方式显示“决定”核心关键词。

3.3 文本分词

(1)分词

全模式分词结果:

十 九/九 届/四 中/四 中 全 会/全 会/在/北 京/胜 利/召开///北京/北京大学/大学/全校/全校师生/师生/收看/和/学习/会议/精神

精确模式分词结果:

['十九','届','四中全会','在','北京','胜利','召开',',','北京大学','全校师生','收看','和','学习','会议','精神']

默认模式模式分词结果:

十九/届/四中全会/在/北京/胜利/召开/,/北京大学/全校师生/收看/和/学习/会议/精神

搜索引擎模式分词结果:

十九/届/四中/全会/四中全会/在/北京/胜利/召开/,/北京/大学/北京大学/全校/师生/全校师生/收看/和/学习/会议/精神

搜索引擎模式分词结果:

['十九','届','四中','全会','四中全会','在','北京','胜利','召开',',','北京','大学','北京大学','全校','师生','全校师生','收看','和','学习','会议','精神']

(2)加载自定义词典

sentence="经研究,王小二任招就办主任,同时兼任主题教育学习教学办主任" #“招就办”和“教学办”为独立词print("分词结果:","/".join(jieba.cut(sentence)))>>

分词结果:经/研究/,/王小二/任/招就办/主任/,/同时/兼任/主题/教育/学习/教学办/主任

自定义词典userdict.txt,内容:

(3)关键词提取

自定义IDF 文本语料库idf_user.txt(图2 所示)作为IDF 语料库进行关键词提取。

图2 自定义IDF语料库

图3 自定义stopwords

(4)词性标注

(5)返回词语在原文的起止位置

3.4 词云

输出结果如图4 所示。

图4 词云(矩形)

输出结果如图5 所示。

图5 不分词直接生成的词云

输出结果如图6 所示。

图6 以中国地图为模板生成的词云

图7 词云(去停用词、指定关键词数、缩放)

输出结果如图7 所示。

输出结果如图8 所示。

输出结果如图9 所示。

4 结语

文本分词是自然语言处理的基础,jieba 中文分词工具是一款广泛使用的文本分词工具。Python 语言是当下热门计算机语言,广泛应用于各个领域,功能强大,拥有许多第三方库和社区支持。本文以十九届四中全会决定为语料,基于jieba 和WordCloud 库详细介绍了中文分词与词云生成技术。

图8 词云(显示轮廓)

图9 词云(模板颜色)

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!