分词方法基于字符串匹配的分词基于理解的分词基于统计的分词
- 格式:ppt
- 大小:1.59 MB
- 文档页数:21
中文分词技术在电子病历系统中的应用二〇一二年十月摘要电子病历(Electronic Medical Record,EMR)是医疗机构医务人员对门诊、住院患者临床诊疗和指导干预的、使用信息系统生成的文字、符号、图表、图形、数据、影像等数字化的医疗服务工作记录,是居民个人在医疗机构历次就诊过程中产生和被记录的完整、详细的临床信息资源,它可在医疗卫生服务中作为主要的信息源,取代纸张病历,医院通过电子病历以电子化方式记录患者就诊的信息,包括:首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等,其中既有结构化信息,也有非结构化的自由文本,还有图形图象信息,在医疗中作为主要的信息源,提供超越纸张病历的服务,满足医疗、法律和管理需求。
电子病历系统(Electronic Medical Record System, EMRs)是针对基于计算机和信息网络的电子病历进行采集、储存、传输、展现、检索、质量控制、统计和利用的系统。
为了进一步推进以电子病历为核心的医院信息化建设工作,提高医院信息化管理水平,截止2012年1月底,卫生部先后制定下发了《电子病历基本规范(试行)》、《电子病历系统功能规范(试行)》、《电子病历系统功能应用水平分级评价方法及标准》、《电子病历基本数据集(征求意见稿)》等法规和规范性文件。
在《电子病历系统功能规范(试行)》中明确了对电子病历书写需要将自然语言方式录入的医疗文书按照医学信息学的要求进行结构化以及对结构化数据的检索和统计进行了要求。
在《电子病历基本数据集(征求意见稿)》中进一步确定了电子病历数据进行数据交换的基本数据集模型。
由此可见电子病历的“结构化”是电子病历系统设计和实施的重点和难点。
本文将阐述如何通过在目前新版电子病历系统中引入中文分词技术,解决目前电子病历系统中电子病历数据的“结构化”难题,实现电子病历用户在实际应用中通过自然语言进行自由文本方式的输入的同时,能够通过计算机的辅助进行病历内容的结构化,为日后的查询、统计、数据交换提供基础。
jiba中⽂分词原理中⽂分词就是将⼀个汉字序列分成⼀个⼀个单独的词。
现有的分词算法有三⼤类:基于字符串匹配的分词:机械分词⽅法,它是按照⼀定的策略将待分析的字符串与⼀个充分⼤的机器词典中的词条进⾏匹配,若在词典中找到某个字符串,则匹配成功。
基于理解的分词⽅法:通过让计算机模拟⼈对句⼦的理解,达到识别词的效果,特点就是在分词的同时进⾏句法,语义的分析,利⽤句法信息和语义信息来处理歧义现象。
通常包括三个部分:分词⼦系统,句法语义⼦系统,总控部分。
基于统计的分词⽅法:给出⼤量的已经分词的⽂本,利⽤统计机器学习模型学习词语切分的规律称为训练,从⽽实现对未知⽂本的切分,例如最⼤概率分词⽅法和最⼤熵分词⽅法等。
随着⼤规模语料库的建⽴,统计机器学习⽅法的研究和发展,基于统计的中⽂分词⽅法渐渐成为了主流⽅法。
jieba⽀持三种分词模式:1.精确分词,试图将句⼦最精确的切开,适合⽂本分析。
2.全模式:把句⼦中所有的可以成词的词语都扫描出来,速度⾮常快,但是不能解决歧义。
3.搜索引擎模式:在精确模式的基础上,对长词再次切分,提⾼召回率,适合⽤于搜索引擎分词。
基本原理:1.基于字典树trie树结构实现⾼效的词图扫描,⽣成句⼦中汉字所有可能成词情况所构成的有向⽆环图(DAG)jieba分词⾃带了⼀个叫做dict.txt的词典,⾥⾯有2万多条词,包含了次条出现的次数和词性,这个⼀个条原理就是把这2万多条词语,放到⼀个trie树中,⽽trie树是有名的前缀树,也就是说⼀个词语的前⾯⼏个字⼀样,就表⽰他们具有相同的前缀。
具有查找速度快的优势。
2.采⽤了动态规划查找最⼤概率路径,找出基于词频的最⼤切分组合动态规划中,先查找待分词句⼦中已经切分好的词语,对该词语查找该词语出现的频率,如果没有该词,就把词典中出现频率最⼩的那个词语的频率作为该词的频率。
对句⼦从右到左反向极端最⼤概率,因为从右往左计算,正确率要⾼于从左往右计算,因为汉语句⼦的中⼼在后⾯,就是落在右边。
全⽂检索有哪些技术原理和过程 全⽂索引⽤于处理⼤⽂本集合,利⽤它⼈们可以在海量⽂本中快速获取需要的信息。
下⾯是店铺整理的全⽂索引的内容,欢迎阅读。
全⽂索引的介绍 全⽂索引技术是⽬前搜索引擎的关键技术。
试想在1M⼤⼩的⽂件中搜索⼀个词,可能需要⼏秒,在100M的⽂件中可能需要⼏⼗秒,如果在更⼤的⽂件中搜索那么就需要更⼤的系统开销,这样的开销是不现实的。
所以在这样的⽭盾下出现了全⽂索引技术,有时候有⼈叫倒排⽂档技术。
全⽂检索技术原理 原理是先定义⼀个词库,然后在⽂章中查找每个词条(term)出现的频率和位置,把这样的频率和位置信息按照词库的顺序归纳,这样就相当于对⽂件建⽴了⼀个以词库为⽬录的索引,这样查找某个词的时候就能很快的定位到该词出现的位置。
问题在处理英⽂⽂档的时候显然这样的⽅式是⾮常好的,因为英⽂⾃然的被空格分成若⼲词,只要我们有⾜够⼤的词汇库就能很好的处理。
但是亚洲⽂字因为没有空格作为断词标志,所以就很难判断⼀个词,⽽且⼈们使⽤的词汇在不断的变化,⽽维护⼀个可扩展的词汇库的成本是很⾼的,所以问题出现了。
解决出现这样的问题使“分词”成为全⽂索引的关键技术。
⽬前有两种基本的⽅法: ⼆元法它把所有有可能的每两两汉字的组合看为⼀个词组,这样就没有维护词库的开销。
词库法它使使⽤词库中的词作为切分的标准,这样也出现了词库跟不上词汇发展的问题,除⾮你维护词库。
实际上现在很多著名的搜索引擎都使⽤了多种分词的办法,⽐如“正向最⼤匹配”+“逆向最⼤匹配”,基于统计学的新词识别,⾃动维护词库等技术,但是显然这样的技术还没有做到完美。
全⽂检索技术存储过程 ⽬前全⽂索引技术正⾛向⼈⼯智能化,也是发展的⽅向。
MicroSoft SqlServer 2000/2005 中的全⽂索引是由⼀系列存储过程来完成的,这些存储过程按先后顺序罗列如下: 1、启动数据库的全⽂索引服务存储过程:sp_fulltext_service 2、初始化全⽂索引存储过程:sp_fulltext_database 3、建⽴全⽂索引⽬录存储过程:sp_fulltext_catalog 4、在全⽂索引⽬录中添加删除表标记存储过程:sp_fulltext_table 5、在全⽂索引⽬录的表中添加或删除列标记存储过程:sp_fulltext_column 全⽂检索的技术 1概述 图书情报界对于检索语⾔的主流观点:⾃然语⾔检索是发展⽅向,信息检索要⾛⾃然语⾔道路;⼈⼯语⾔不适应⽹络环境;⽬前⾃然语⾔检索技术虽有缺点,但⼈⼯智能发展可使其逐步达到完善,满⾜检索的要求。
中文分词相关技术简介目前对汉语分词方法的研究主要有三个方面:基于规则的分词方法、基于统计的分词方法和基于理解的分词方法。
基于规则的分词方法基于规则的分词方法,这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个"充分大的"机器词典中的词条进行匹配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。
常用的方法:最小匹配算法(Minimum Matching),正向(逆向)最大匹配法(Maximum Matching),逐字匹配算法,神经网络法、联想一回溯法,基于N-最短路径分词算法,以及可以相互组合,例如,可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法等。
目前机械式分词占主流地位的是正向最大匹配法和逆向最大匹配法。
◆最小匹配算法在所有的分词算法中,最早研究的是最小匹配算法(Minimum Matching),该算法从待比较字符串左边开始比较,先取前两个字符组成的字段与词典中的词进行比较,如果词典中有该词,则分出此词,继续从第三个字符开始取两个字符组成的字段进行比较,如果没有匹配到,则取前3个字符串组成的字段进行比较,依次类推,直到取的字符串的长度等于预先设定的阈值,如果还没有匹配成功,则从待处理字串的第二个字符开始比较,如此循环。
例如,"如果还没有匹配成功",取出左边两个字组成的字段与词典进行比较,分出"如果";再从"还"开始,取"还没",字典中没有此词,继续取"还没有",依次取到字段"还没有匹配"(假设阈值为5),然后从"没"开始,取"没有",如此循环直到字符串末尾为止。
这种方法的优点是速度快,但是准确率却不是很高,比如待处理字符串为"中华人民共和国",此匹配算法分出的结果为:中华、人民、共和国,因此该方法基本上已经不被采用。
分词算法一般有三类:基于字符串匹配、基于语义分析、基于统计。
复杂的分词程序会将各种算法结合起来以便提高准确率。
Lucene被很多公司用来提供站内搜索,但是Lucene本身并没有支持中文分词的组件,只是在Sandbox里面有两个组件支持中文分词:ChineseAnalyzer和CJKAnalyzer。
ChineseAnalyzer 采取一个字符一个字符切分的方法,例如"我想去北京天安门广场"用ChineseAnalyzer分词后结果为:我#想#去#北#京#天#安#门#广#场。
CJKAnalyzer 则是二元分词法,即将相邻的两个字当成一个词,同样前面那句用CJKAnalyzer 分词之后结果为:我想#想去#去北#北京#京天#天安#安门#门广#广场。
这两种分词方法都不支持中文和英文及数字混合的文本分词,例如:IBM T60HKU现在只要11000元就可以买到。
用上述两种分词方法建立索引,不管是搜索IBM还是11000都是没办法搜索到的。
另外,假如我们使用"服务器"作为关键字进行搜索时,只要文档包含"服务"和"器"就会出现在搜索结果中,但这显然是错误的。
因此,ChineseAnalyzer和CJKAnalyzer虽然能够简单实现中文的分词,但是在应用中仍然会感觉到诸多不便。
基于字符串匹配的分词算法用得很多的是正向最大匹配和逆向最大匹配。
其实这两种算法是大同小异的,只不过扫描的方向不同而已,但是逆向匹配的准确率会稍微高一些。
"我想去北京天安门广场"这句使用最大正向分词匹配分词结果:我#想去#北京#天安门广场。
这样分显然比ChineseAnalyzer和CJKAnalyzer来得准确,但是正向最大匹配是基于词典的,因此不同的词典对分词结果影响很大,比如有的词典里面会认为"北京天安门"是一个词,那么上面那句的分词结果则是:我#想去#北京天安门#广场。
网络文本分析法的优势文本处理的方法当下的一些网络文本分析的难点:1)数据是实时动态变化的,比如一些博客、评论、聊天信息等刷新速度特别快,并且数量庞大2)存在这一些短文本的文本数量较少,包含的有效信息也比较小,但是特征集的维数很高,这就导致了很难从中抽取准确的特征来进行文本分类。
3)一些新兴的网络词,比如童鞋、屌丝、v587等,包含的文本噪声信息较多。
文本的打标即标识出那些比较重要性的关键词概念:词频-逆向文件频率(TF-IDF)TF-IDF=TF*IDFTF:代表的是单个词在对应文章中出现的频率IDF:代表的是某个词语T的文章占总文章集合的百分比目前的分词方法1.基于字符串匹配和规则的分词方法(机械分词法)与字典的进行匹配:存在的问题是对词典的依赖性较大,分词的效果的词义偏差较大,不能识别一些新的登陆词其中按照是否与词性标注相结合,又可以分为单纯分词方法和与标注相结合的方法。
2.基于统计的分词方法:只需要对语料中的字信息进行统计,不需要切分词典。
主要常用的统计量和统计模型:互信息、最大熵模型、隐马尔科夫模型等。
存在的问题是:仍然存在着很大的分词歧义。
利用词和词之前的联合出现概率作为分词判断的信息。
3.基于理解的分词方法基本思想是:在分词的同时进行语法、语义分析、利用句法信息和语义信息来解决歧义的现象。
a.基于隐马尔可夫模型的词标注中文分词法b.基于层叠的因马尔科夫模型的汉语词法分析方法c.神经网络方法d.深度学习的方法4.基于深度学习的短文本分析文本分类的效果的评价准确率:所有预测正确的样本/总的样本精准率:将正类预测为正类/所有预测为正类召回率:将正类预测为正类/所有正真的正类F1值:准确率召回率2/(正确率+召回率)相关工具1.word2vector2.标签云3.倾向性分析4.结巴分词结巴分词支持的三种分词模式:1)精确模式:适合文本分析2)全模式:把句子中的所有可以成词的词语都扫描出来,速度很快,但是不能解决歧义3)搜索引擎模式名字啊精确模式的基础上,在对长词进行切分,提高召回率,适合搜索引擎分词。
实验报告1 双向匹配中文分词•小组信息目录摘要--------------------------------------------------------------------------------------- 1理论描述--------------------------------------------------------------------------------- 1算法描述--------------------------------------------------------------------------------- 2详例描述--------------------------------------------------------------------------------- 3软件演示--------------------------------------------------------------------------------- 4总结--------------------------------------------------------------------------------------- 6•摘要这次实验的内容是中文分词,现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。
按照是否与词性标注过程相结合,又可以分为单纯分词方法和分词与标注相结合的一体化方法。
而我们用到的分词算法是基于字符串的分词方法(又称机械分词方法)中的正向最大匹配算法和逆向匹配算法。
一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。
统计结果表明,单纯使用正向最大匹配的错误率为1/169,单纯使用逆向最大匹配的错误率为1/245。
•理论描述中文分词指的是将一个汉字序列切分成一个一个单独的词。
Lucene中文分词Lucene 中文分词什么是中文分词众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。
例如,英文句子I am a student,用中文则为:“我是一个学生”。
计算机可以很简单通过空格知道student是一个单词,但是不能很容易明白“学”、“生”两个字合起来才表示一个词。
把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。
我是一个学生,分词的结果是:我是一个学生。
回页首中文分词技术现有的分词技术可分为三类:基于字符串匹配的分词基于理解的分词基于统计的分词这篇文章中使用的是基于字符串匹配的分词技术,这种技术也被称为机械分词。
它是按照一定的策略将待分析的汉字串与一个“充分大的”词库中的词条进行匹配。
若在词库中找到某个字符串则匹配成功(识别出一个词)。
按照扫描方向的不同,串匹配分词方法可以分为正向匹配和逆向匹配;按照不同长度优先匹配的情况,可以分为最大(最长)匹配和最小(最短)匹配;按照是否与词性标注过程相结合,又可以分为单纯分词法和分词与标注结合法。
常用的几种机械分词方法如下:正向最大匹配法(由左到右的方向)逆向最大匹配法(由右到左的方向)回页首分词器实现这个实现了机械分词中正向最大匹配法的Lucene分词器包括两个类,CJKAnalyzer和CJKT okenizer,他们的源代码如下:package org.solol.analysis;import java.io.Reader;import java.util.Set;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.StopFilter;import org.apache.lucene.analysis.TokenStream;/*** @author solo L**/public class CJKAnalyzer extends Analyzer {//实现了Analyzer 接口,这是lucene的要求public final static String[] STOP_WORDS = {};private Set stopTable;public CJKAnalyzer() {stopTable = StopFilter.makeStopSet(STOP_WORDS);}@Overridepublic TokenStream tokenStream(String fieldName, Readerreader) {return new StopFilter(new CJKT okenizer(reader), stopTable);}}package org.solol.analysis;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.Reader;import java.util.TreeMap;import org.apache.lucene.analysis.Token;import org.apache.lucene.analysis.Tokenizer;/*** @author solo L**/public class CJKT okenizer extends Tokenizer {//这个TreeMap用来缓存词库private static TreeMap simWords = null;private static final int IO_BUFFER_SIZE = 256;private int bufferIndex = 0;private int dataLen = 0;private final char[] ioBuffer = new char[IO_BUFFER_SIZE]; private String tokenType = "word";public CJKT okenizer(Reader input) {this.input = input;}//这里是lucene分词器实现的最关键的地方public Token next() throws IOException {loadWords();StringBuffer currentWord = new StringBuffer();while (true) {char c;Character.UnicodeBlock ub;if (bufferIndex >= dataLen) {dataLen = input.read(ioBuffer);bufferIndex = 0;}if (dataLen == -1) {if (currentWord.length() == 0) {return null;} else {break;}} else {c = ioBuffer[bufferIndex++];ub = Character.UnicodeBlock.of(c);}//通过这个条件不难看出这里只处理了CJK_UNIFIED_IDEOGRAPHS,//因此会丢掉其它的字符,如它会丢掉LATIN字符和数字//这也是该lucene分词器的一个限制,您可以在此基础之上完善它,//也很欢迎把您完善的结果反馈给我if (Character.isLetter(c) && ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) { tokenType = "double";if (currentWord.length() == 0) {currentWord.append(c);} else {//这里实现了正向最大匹配法String temp = (currentWord.toString() + c).intern();if (simWords.containsKey(temp)) {currentWord.append(c);} else {bufferIndex--;break;}}}}Token token = new T oken(currentWord.toString(), bufferIndex - currentWord.length(), bufferIndex, tokenType);currentWord.setLength(0);return token;//装载词库,您必须明白它的逻辑和之所以这样做的目的,这样您才能理解正向最大匹配法是如何实现的public void loadWords() {if (simWords != null)return;simWords = new TreeMap();try {InputStream words = new FileInputStream("simchinese.txt");BufferedReader in = new BufferedReader(new InputStreamReader(words,"UTF-8"));String word = null;while ((word = in.readLine()) != null) {//#使得我们可以在词库中进行必要的注释if ((word.indexOf("#") == -1) && (word.length() < 5)) {simWords.put(word.intern(), "1");if (word.length() == 3) {if (!simWords.containsKey(word.substring(0, 2).intern())) {simWords.put(word.substring(0, 2).intern(), "2");}}if (word.length() == 4) {if (!simWords.containsKey(word.substring(0, 2).intern())) {simWords.put(word.substring(0, 2).intern(), "2");}if (!simWords.containsKey(word.substring(0, 3).intern())) {simWords.put(word.substring(0, 3).intern(), "2");}}}}in.close();} catch (IOException e) {e.printStackTrace();}}}回页首分词效果这是我在当日的某新闻搞中随意选的一段话:此外,巴黎市政府所在地和巴黎两座体育场会挂出写有相同话语的巨幅标语,这两座体育场还安装了巨大屏幕,以方便巴黎市民和游客观看决赛。
DWT中文分词系统的设计与实现摘要:改变传统分词系统字典词语的线性排列方式,结合现代汉语词语特点,采用树型结构表示词语——词树。
词语匹配过程中,依托树型字典,使用直接查找算法匹配字符,从空间和时间两个方面提高分词效率。
关键词:词树;树型字典;直接查找算法中图分类号:tp301文献标识码:a文章编号:1007-9599 (2013)07-0000-021dwt(directword-tree)中文分词系统中文分词系统是计算机自然语义处理的第一步,也是非常重要的一步,现有的中文分词算法主要可分为三大类:基于字符串匹配,基于理解和基于统计的分词方法。
其中,基于字符串匹配分词方法应用最广,该方法依赖一个“充分大的”字典,按照字典正/逆向、字符串长度最大/最小匹配的综合算法,进行分词处理[1-4]。
传统的基于字符串匹配的分词系统主要问题有:必须读入大量冗余的字典词语,内存占用高;在匹配过程中,需遍历读入的字典词语,匹配效率低。
针对以上问题,本文设计和实现了dwt中文分词系统,其独特之处在于:提出词树概念,将传统的线性字典转换为树型结构表示;使用文件系统转存抽象词树,无需读入字典文件即可匹配字符;结合直接查找算法,可以直接查找词树子结点,不需要遍历所有当前子树结点。
2实现原理2.1词树词树:以一个汉字为根,将所有以这个汉字开始的合法的汉语词语整合而成的一个树型结构。
词树的定义实现了将传统分词字典词语线性排列的结构转换成树型结构。
以下一组词语为例:是非是否是不是是是非非是非曲直是非功过是可忍孰不可忍对于以上示例的词语,图1显示的是示例词语在传统的线性字典结构下,在字典文件中的存储形式,词语按照线性结构和一定的排列规则逐个出现,图2显示的是示例词语在树型结构下的存储形式,按照词语间的字符关系可以将示例词语整合成如图2的词树。
2.2树型字典树型字典:使用文件系统的树型目录结构来转存词树。
系统采用的主体词库为商务印书馆出版的《现代汉语词典》,并以常见的分词词库作为补充,保证词库容量。