杨鹏 张利强 贺斯慧
【摘 要】随着互联网的飞速发展,各类网络开发平台飞速成长,供用户在网络上畅所欲言,交流学习。但是,各种垃圾信息在网络上频繁发布,违背了网络平台开发的初衷,污染了网络环境。为杜绝此类垃圾信息,各大平台都采取各种措施优化网络环境,但是效果不佳,究其原因在于文字的任意组合排列都会产生不同的信息,而在拦截垃圾信息时必须进行模板化配置拦截,这就导致垃圾信息是可变的而拦截信息却要人为操作。为解决此类问题,可以将垃圾信息细化成单独的个体,也就是对信息进行分词。
【关键词】word分词;词频;中文分词
【中图分类号】TP311.52 【文献标识码】A 【文章编号】1674-0688(2020)10-0070-03
0 引言
中文分词处理需要对现有的中文信息至少从字、词、句等3个层面进行处理,甚至必须从语义、词性等方面处理才能分析出其中意义。在中文里面,词是最小的语言单位,如果不处理好中文分词的问题,那么处理语句问题也就无从谈起,所以中文分词是中文处理技术的基础。相对于其他语言,中文分词是比较复杂的。英语的单词之间有着空格相隔,检索方便,并且采用穷举的方式表达其意,因此不存在分词的说法。中文语句之间是没有分割符的,想要处理中文,就需要专门的技术支撑。随着自然语言的兴起发展,涌现众多算法支撑中文分词。根据特点,我们可以分为以下几类:匹配算法、理解算法、统计算法、语义算法。每种方法各有优劣,目前没有单一的算法能达到令人满意的结果,只有优势互补才能得到相对好的结果。
本文结合各类算法并利用现有的网络环境提供了多种基于词典的分词算法,选用Java语言利用Word分词去除词句相近的多重歧义。能够准确地识别时间、日期及数字等数量词,结合中国国情能够识别出人名、地名、组织结构名等未登录词。提供配置化改变词库行为及丰富分词的功能;用户自己上传词库,自动监听词库改变;能够在现在流行的分布式环境下提供支持,提供统计词频、拼音、未登录词、量词等功能。结合市面上各种各大分布式框架进行Lucene、Solr、ElasticSearch、Luke集成实时处理。
1 分词算法
分词算法大体可以总结为四大类,分别是基于规则的分词、基于统计的分词、基于语义的分词、基于理解的分词。
1.1 基于规则的分词方法
基于规则的分词方法是一种机械分词方法,需要依托于字典的词库模型分词,按照定义的策略将要分解的字符串与词库模型进行逐条匹配。找到则匹配成功。这种方式和数据库的搜索类似,因此该方法受一定的环境限制,倘若词库过于庞大,在匹配时就会消耗大量的资源和时间。这种方法需要保证文本的扫描顺序、词典及匹配规则。文本的扫描索引类似链表查询节点,有正向、逆向、双向3种选择。原则上可以分为正向最大匹配法和逆向最大匹配法及双向结合最佳匹配法。
1.2 基于统计的分词方法
基于统计的分词的主要思路:词是能够穷举的稳定组合,因此如果相邻的字出现在同一场景下的次数过多就可能组成一个词。基于这样的规则,我们通过字出现的概率和频率统计词的可信度。对文本中字之间出现位置频度进行统计,得出它们之间的相作用信息。该信息体现了文字之间的紧密度。当紧密度大于阈值时,可以将这个字组合认为是一个词。该方法所应用的主要的统计模型是N-gram模型,也就是本系统主要使用的模型。市面上还有其他成熟模型,例如条件随机模型、最大熵模型、隐马尔可夫模型等。
1.3 基于理解的分词方法
利用计算机的运算,按照策略模拟大脑运算并分析句子的含义,从而达到识别效果。这是一种先进的分词方式,它结合了句法、语义、分词等多种分词方式进行处理。主要包括分词系统、歧义识别系统、总控系统。在总控系统的协调下,分词系统可以对分词的相关词、句子等信息进行判断,模拟人对文本的理解过程,这种方法需要大量的語言知识库。
2 系统设计
本系统从应用上划分为两大块;一是作为开放平台供人们使用统计,用于日常中文分析结合网络环境动态识别语言多重含义,分解短语统计词性;二是作为开发平台衔接市面上各大信息分析框架如Lucence、Solr、ElasticSearch、Luke、Redis等各大分布式缓存框架,提供分词处理驱动。
2.1 分词引擎
分词引擎,分词实现支撑主要由分词词典和规则库组成。利用责任链模式,流程如下:输入待处理中文文本→基本分词→歧义字段切分→命名实体的识别→未登陆词的识别→分词过滤→分词结果。上述组成分词引擎,作为开放平台和开发平台的功能支撑(如图1所示)。
2.2 平台架构
开放平台主要采用流行的Web应用,通过前端应用传递分词结果,由后端进行处理,调用分词引擎将分词信息返回给调用者,调用者通过分析框架和引擎进行分词统计分析。开发平台采用依赖包和请求配置等进行接入,不会破坏系统的原来架构和代码,作为一个插拔式的、拿来即用的应用。
2.3 开发语言
开发语言选用面向对象的语言JAVA作为基础引擎的功能开发语言,现在市面上常用应用分布在Web端和App端,而这两端的后台支撑80%左右都是JAVA语言,并且JAVA语言在数据分析存储方面也有着巨大的优势,比如常搭配分布式使用的ES(ElasticSearch)、Hadoop、Spark等高性能框架。我们采用JAVA语言开发分词引擎可以很好地接入这些框架。
2.4 分词组件
Word分词器自带多种词典分词算法,文本相似算法覆盖面广泛,利用N-gram模型识别短语歧义,底层也是采用JAVA语言编写,因此可以更加方便地接入各大平台,并且为分词引擎提供很好的环境支持。
3 系统主要模块设计与实现
3.1 word分词
用户通过Web表单提交待分词的中文文本,前端通过Axios.create(config)方法创建Axios实体拦截用户请求,调用axiosInstance.interceptor.response.use(config)方法转发请求,系统后端在接到请求后初始化继承自SpringSecurity的OncePerRequestFilter的filter对象,并调用其doFilterInternal()方法获得用户提交的数据与请求。获取文本后,调用SplitFactory.getInstance(wordConfig.xml)读取word分词依赖,并生成analyzer实例,analyzer调用tokenStream(“text”,splitWordStr)得到分词切片器对象tokenStream,然后对分词切片器进行停用词、词库、自建字典、优先级设置,设置完成后通过split获得分词结果,同时调用数据访问类将结果存入数据库中,供后期词频统计使用。
3.2 词频字典
数据字典是后端应用开发漫长过程中总结出来的一套通用的程序设计方法,它的作用是存储除了需求业务主体之外的属性信息,从而统一维护管理。例如,用户存在性别属性,性别又有男、女的取值范围,此时该属性的取值范围或者说取值枚举就需要用统一数据集进行维护,这就是数据字典的作用。在词频分析系统中,为了更快速地对词频进行分析,借用数据字典的思想,将所有字词作为数据元,在数据库中存儲字词出现的次数及与其他词语相关出现的次数,将这些结果作为词的属性,使用枚举类型统一管理配置。
3.3 词频分析
词频WordFrequency表示的是某一个词语在文本中出现的频率。假定在文本字符串集S{s1,s2,s3,…,sn}中包含n个字符串,包含特征词的Wi的字符串数为m,m除以n的结果就是关键词Wi的词频,即
WFi值越大,表示词语在文本中出现的概率高,则该词语的参考价值高,反之则表示该词语参考价值低。当WFi极低时,表明该词对文本内容没有贡献,删除该词对分词结果没有影响,所以为了降低系统的复杂度,系统通过最小风险估计法,设置一个最低阈值,当WFi低于该值时,自动删除该词。
词频分析的实现过程核心如下:
调用new WordInfomation()方法初始化用于保存关键词、出现次数、相关度的WordInformation对象,并将当前关键词通过setInfo(keyString.getString())注入wordInformation中,并通过while循环进行遍历查询比较,统计该词在字符串中出现的次数及与之相关的词语。While(keyStringList.hasNext()){ if(keyString)在文本中出现,那么调用setInfoNumberCount(wordInformation.getInfoNumber()+1);累加出现记录次数。完成遍历后,将出现次数除以字符串总数,得出词频概率,并通wordDaoImplement对象的update(wordFreq)方法将其存入数据库中。
3.4 结果展示
为了更直观、高效地将分词与词频结果展示给用户,后台完成分词统计后,将结果封装到json对象中,并通过response对象将json转发给前台页面,前台页面中使用Vue进行数据解析,首先调用initRender()对页面中需要使用的form、laydateInstance、formInstance等layUI组件进行初始化,完成初始化后通过$.each(res.data,function(i,obj))方法完成数据的绑定,然后通过render方法将数据进行渲染刷新,将结果展现给用户(如图2所示)。
4 结语
目前,分词引擎主要利用自然语言中的技术,尚不能完美地处理语法分析的问题。在语法词义等方面的自动分析研究还需要进一步挖掘。在自然语法挖掘方面,神经网络分词具有显著的优势。但是,目前人们的状态转义和规则推理尚不能完全表达出人类大脑思维的机制;对复杂、模糊的信息处理,仍然处于无能为力的地步;分词库的建设和词典选择还具备大量的人为因素。对此,本文提出了一种基于Word的中文词频分析系统,采用Javaweb框架技术,将传统分词进行平台化,为垃圾信息处理提供前置服务和参考。
参 考 文 献
[1]丁洁,赵景惠.基于N-gram模型的中文分词算法的研究[J].福建电脑,2017(5):110,116.
[2]杨贵军,徐雪,凤丽洲,等.基于最大匹配算法的似然导向中文分词方法[J].统计与信息论坛,2019,34(3):19-24.
[3]于舒曼,马秀峰.基于词频分析和共词聚类的图书馆创客空间研究热点分析[J].大学图书情报学刊,2019,37(2):99-103.