时间:2024-05-04
石凤贵
(马鞍山师范高等专科学校软件工程系,马鞍山243041)
随着大数据和人工智能的快速发展,大数据和人工智能给人们学习、工作和生活带来了居多便利。分词是分析处理文本数据的基础,广泛应用于很多领域,自然语言处理的预处理首要任务就是分词。自然语言处理包括信息检索、语音合成、文本分类、自动文摘等[1]。目前比较成熟的分词工具有:jieba、SnowNLP、THULAC、NLPIR 等。词云是一种以可视化的方式显示文本关键词的技术,在分词的基础上设计实现,根据关键词的词频使用不同的方式展示,以有兴趣、高效、形象的方式展示。
中文语句是一种字符序列,由字和词构成,同一个字词在不同的语句中或在不同的文本中意义不同。计算机要准确理解文本,首先需要进行文本分词,按照一定的分词规则和算法对文本进行切分。分词就是依据某一规则和算法将文本中词切分出来,构成词列表,后续对文本的分析理解就是基于分词列表。分词算法主要包括基于字符串匹配、基于统计和基于理解三类。
首先,中文语句中词与词之间没有明显的分隔标志,不像英文语句中词与词之间通过空格进行分隔。其次,中文中字词和短语无论是字数、结构、构成方面没有明显的界线,容易产生不同的切分结果。其三,中文词在不同的文本环境中表达的意思不同,而且一个中文词具有多种意思,容易产生歧义。其四,实体名词如人名、地名、机构名、商品名、简称等难易识别切分,另外网络上和新媒体环境下经常会出现一些新词、网络流行用语,行业领域具有行业专业术语,这些词难易识别和全面识别。其五,切出来的字词长度也影响分词效果[2]。
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)返回词语在原文的起止位置
词云就是将文本中高频“关键词”以可视化的方式呈现,形象、生动、有趣,自动过滤低频词和非关键文本信息,直观、一目了然,不同的词采用不同的颜色表示。Python 中第三方库WordCloud 是一款广泛应用于词云展示的词云库。词云以词为基本单位,以文本中词出现频率作为参数生成,结果图形化显示。词云属性大小、颜色、形状等均可设置[4]。
每个词云是一个WordCloud 对象,生成词云一般按照三个步骤设置就可以,第一步定义词云对象并设置参数,使用wordcloud.WordCloud()实现;第二步生成词云,使用wordcloudObj.generate(text)或wordcloudobj.generate_from_frequencies(frequencies[,…]);第三步输出显示词云,使用matplotlib.pyplot 来显示词云,wordcloudObj.to_file(file_name)保存词云为图片文件。主要参数[5]见表2 所示。
表2 词云参数
本文以“十九大四中全会决定”语料进行实现展示。
Python 是一门目前广泛流行的计算机高级程序设计语言,在大数据、人工智能领域更是被广泛使用,大数据与人工智能正处于快速发展阶段,与Java、C、C++成为四大流行程序设计语言。Python 简洁、优美、开源、功能强大,许多社区提供了Python 技术的支持,第三方库数以万计。Python 广泛应用于桌面程序开发、Web 应用开发、自动化测试运维、爬虫、大数据处理、人工智能等各个领域,在IEEE Spectrum 发布的2017 和2018 年编程语言排行榜中位居第一。本文使用Python的第三方库jieba 和WordCloud 进行分词和生成词云[6]。
十九届四中全会审议通过了《中共中央关于坚持和完善中国特色社会主义制度、推进国家治理体系和治理能力现代化若干重大问题的决定》,号召全党全国各族人民要更加紧密地团结在以***同志为核心的党中央周围,坚定信心,保持定力,锐意进取,开拓创新,为坚持和完善中国特色社会主义制度、推进国家治理体系和治理能力现代化,实现“两个一百年”奋斗目标、实现中华民族伟大复兴的中国梦而努力奋斗[7]。本文以十九届四中全会决定为语料生成词云,直观、图形方式显示“决定”核心关键词。
(1)分词
全模式分词结果:
十 九/九 届/四 中/四 中 全 会/全 会/在/北 京/胜 利/召开///北京/北京大学/大学/全校/全校师生/师生/收看/和/学习/会议/精神
精确模式分词结果:
['十九','届','四中全会','在','北京','胜利','召开',',','北京大学','全校师生','收看','和','学习','会议','精神']
默认模式模式分词结果:
十九/届/四中全会/在/北京/胜利/召开/,/北京大学/全校师生/收看/和/学习/会议/精神
搜索引擎模式分词结果:
十九/届/四中/全会/四中全会/在/北京/胜利/召开/,/北京/大学/北京大学/全校/师生/全校师生/收看/和/学习/会议/精神
搜索引擎模式分词结果:
['十九','届','四中','全会','四中全会','在','北京','胜利','召开',',','北京','大学','北京大学','全校','师生','全校师生','收看','和','学习','会议','精神']
(2)加载自定义词典
sentence="经研究,王小二任招就办主任,同时兼任主题教育学习教学办主任" #“招就办”和“教学办”为独立词print("分词结果:","/".join(jieba.cut(sentence)))>>
分词结果:经/研究/,/王小二/任/招就办/主任/,/同时/兼任/主题/教育/学习/教学办/主任
自定义词典userdict.txt,内容:
(3)关键词提取
自定义IDF 文本语料库idf_user.txt(图2 所示)作为IDF 语料库进行关键词提取。
图2 自定义IDF语料库
图3 自定义stopwords
(4)词性标注
(5)返回词语在原文的起止位置
输出结果如图4 所示。
图4 词云(矩形)
输出结果如图5 所示。
图5 不分词直接生成的词云
输出结果如图6 所示。
图6 以中国地图为模板生成的词云
图7 词云(去停用词、指定关键词数、缩放)
输出结果如图7 所示。
输出结果如图8 所示。
输出结果如图9 所示。
文本分词是自然语言处理的基础,jieba 中文分词工具是一款广泛使用的文本分词工具。Python 语言是当下热门计算机语言,广泛应用于各个领域,功能强大,拥有许多第三方库和社区支持。本文以十九届四中全会决定为语料,基于jieba 和WordCloud 库详细介绍了中文分词与词云生成技术。
图8 词云(显示轮廓)
图9 词云(模板颜色)
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!