首页 > 编程知识 正文

自然语言处理算法,语义识别和自然语言处理

时间:2023-05-05 13:54:44 阅读:110479 作者:2907

本文首先介绍中文分词基本原理,然后介绍国内比较流行的3358www.Sina.com/,例如中文分词工具

1 .中文分词原理介绍1.1中文分词概要3358www.Sina.com/是指jiebaSnowNLPTHULAC

1.2中文分词方法目前的NLPIR分为三种:github中文分词(Chinese Word Segmentation)将一个汉字序列切分成一个一个单独的词

1.2.1基于字符串匹配的分词方法分词也称为将连续的字序列按照一定的规范重新组合成词序列的过程,根据分词方法基于字符串匹配的分词方法

根据基于理解的分词方法,字符串匹配分词方法为基于统计的分词方法和3358www.Sina.com/; 如基于字符串匹配的分词方法,请参阅机械分词方法一定的策略; 根据待分析的汉字串,可以分为充分大的”机器词典若在词典中找到某个字符串。 常用的匹配成功包括以下内容:

)1)扫描方向(从左到右的方向);

)2)正向匹配(从右到左的方向);

)3)逆向匹配) )每句的切割词数最小);

)4)不同长度优先匹配(进行从左到右、从右到左两次扫描) )。

该算法的最大(最长)匹配可以保持时间复杂度为o(n ),实现简单,效果也很好; 但是,对最小(最短)匹配是否与词性标注过程相结合的处理效果不佳。

1.2.2基于理解的分词方法单纯分词方法分词与词性标注相结合的一体化方法,具有识别单词的效果。 其字符串匹配方法正向最大匹配法,利用逆向最大匹配法最小切分公开了3358www.Sina.com/与双向最大匹配合作,模拟了人类对优点是速度快,即句子的理解过程。 该分词方法由于歧义中文语言知识的笼统、复杂,难以将各种语言信息组织成机器可读的形式,目前基于理解的分词系统位于未登录词中。

1.2.3基于统计的分词方法基于理解的分词方法,前提是http://www.Sina.com/(http://www.Sina.com/) 由此例如通过让计算机模拟人对句子的理解基本思想等。 随着大规模语料库的建立、统计机器学习方法的研究和发展,在分词的同时进行句法、语义分析

的主要句法信息有:语义信息(n-gram )、处理歧义) hiddenma

rkov Model ,HMM),最大熵模型(ME),条件随机场模型(Conditional Random Fields,CRF)等。

在实际的应用中,基于统计的分词系统都需要使用分词词典进行字符串匹配分词,同时使用统计方法识别一些新词,即将字符串频率统计字符串匹配结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点

2.中文分词工具介绍 2.1 jieba (github star数 9003)

jieba分词是国内使用人数最多的中文分词工具(github链接:https://github.com/fxsjy/jieba)。jieba分词支持三种模式

(1)精确模式:试图将句子最精确地切开,适合文本分析

(2)全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义

(3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率适合用于搜索引擎分词

jieba分词过程中主要涉及如下几种算法:

(1)基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);

(2)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

(3)对于未登录词,采用了基于汉字成词能力的 HMM 模型,采用Viterbi 算法进行计算;

(4)基于Viterbi算法做词性标注

(5)基于tf-idftextrank模型抽取关键词

测试代码如下所示:

# -*- coding: utf-8 -*-"""jieba分词测试"""import jieba#全模式test1 = jieba.cut("杭州西湖风景很好,是旅游胜地!", cut_all=True)print("全模式: " + "| ".join(test1))#精确模式test2 = jieba.cut("杭州西湖风景很好,是旅游胜地!", cut_all=False)print("精确模式: " + "| ".join(test2))#搜索引擎模式test3= jieba.cut_for_search("杭州西湖风景很好,是旅游胜地,每年吸引大量前来游玩的游客!") print("搜索引擎模式:" + "| ".join(test3))

测试结果如下图所示:

2.2 SnowNLP(github star数 2043)

SnowNLP是一个python写的类库(https://github.com/isnowfy/snownlp),可以方便的处理中文文本内容,是受到了TextBlob的启发而写的。SnowNLP主要包括如下几个功能:

(1)中文分词(Character-Based Generative Model);

(2)词性标注(3-gram HMM);

(3)情感分析(简单分析,如评价信息);

(4)文本分类(Naive Bayes)

(5)转换成拼音(Trie树实现的最大匹配)

(6)繁简转换(Trie树实现的最大匹配)

(7)文本关键词文本摘要提取(TextRank算法)

(8)计算文档词频TF,Term Frequency)和逆向文档频率IDF,Inverse Document Frequency)

(9)Tokenization(分割成句子)

(10)文本相似度计算(BM25)

SnowNLP的最大特点是特别容易上手,用其处理中文文本时能够得到不少有意思的结果,但不少功能比较简单,还有待进一步完善。

测试代码如下所示:

# -*- coding: utf-8 -*-"""SnowNLP测试"""from snownlp import SnowNLPs = SnowNLP(u'杭州西湖风景很好,是旅游胜地,每年吸引大量前来游玩的游客!')#分词print(s.words)#情感词性计算print("该文本的情感词性为正的概率:" + str(s.sentiments))text = u'''西湖,位于浙江省杭州市西面,是中国大陆首批国家重点风景名胜区和中国十大风景名胜之一。它是中国大陆主要的观赏性淡水湖泊之一,也是现今《世界遗产名录》中少数几个和中国唯一一个湖泊类文化遗产。西湖三面环山,面积约6.39平方千米,东西宽约2.8千米,南北长约3.2千米,绕湖一周近15千米。湖中被孤山、白堤、苏堤、杨公堤分隔,按面积大小分别为外西湖、西里湖、北里湖、小南湖及岳湖等五片水面,苏堤、白堤越过湖面,小瀛洲、湖心亭、阮公墩三个小岛鼎立于外西湖湖心,夕照山的雷峰塔与宝石山的保俶塔隔湖相映,由此形成了“勤恳的雨、二塔、三岛、三堤、五湖”的基本格局。'''s2 = SnowNLP(text)#文本关键词提取print(s2.keywords(10))

测试结果如下图所示:

2.3 THULAC (github star数 311)

THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包(github链接:https://github.com/thunlp/THULAC-Python),具有中文分词词性标注功能。THULAC具有如下几个特点:

(1)能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大

(2)准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。

(3)速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。

THU词性标记集(通用版)如下所示:

n/名词 np/人名 ns/地名 ni/机构名 nz/其它专名m/数词 q/量词 mq/数量词 t/时间词 f/方位词 s/处所词v/动词 a/形容词 d/副词 h/前接成分 k/后接成分 i/习语 j/简称 r/代词 c/连词 p/介词 u/助词 y/语气助词e/叹词 o/拟声词 g/语素 w/标点 x/其它

测试代码(python版)如下所示:

# -*- coding: utf-8 -*-"""THULAC 分词测试"""import thulac #默认模式,分词的同时进行词性标注test1 = thulac.thulac()text1 = test1.cut("杭州西湖风景很好,是旅游胜地!")print(text1)#只进行分词test2 = thulac.thulac(seg_only=True)text2 = test2.cut("杭州西湖风景很好,是旅游胜地!")print(text2)

测试结果如下图所示:

2.4 NLPIR (github star数 811)

NLPIR分词系统(前身为2000年发布的ICTCLAS词法分析系统,gtihub链接:https://github.com/NLPIR-team/NLPIR),是由北京理工大学ngdzjy博士研发的中文分词系统,经过十余年的不断完善,拥有丰富的功能和强大的性能。NLPIR是一整套对原始文本集进行处理和加工的软件,提供了中间件处理效果的可视化展示,也可以作为小规模数据的处理加工工具。主要功能包括:中文分词词性标注命名实体识别用户词典新词发现关键词提取等功能。本文测试所采用的是PyNLPIRNLPIRPython版本,github链接:https://github.com/tsroten/pynlpir)

测试代码如下所示:

# -*- coding: utf-8 -*-"""PYNLPIR 分词测试"""import pynlpir#打开分词器pynlpir.open()text1 = "杭州西湖风景很好,是旅游胜地,每年吸引大量前来游玩的游客!" #分词,默认打开分词和词性标注功能test1 = pynlpir.segment(text1)#print(test1)print('1.默认分词模式:n' + str(test1))#将词性标注语言变更为汉语test2 = pynlpir.segment(text1,pos_english=False)print('2.汉语标注模式:n' + str(test2))#关闭词性标注test3 = pynlpir.segment(text1,pos_tagging=False)print('3.无词性标注模式:n' + str(test3))

测试结果如下图所示:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。