精华内容
下载资源
问答
  • 中文分词词典

    2014-12-22 16:56:55
    中文分词词典,Python 作业 中文 分词 词典
  • 30万字中文分词词典

    2017-10-27 17:03:09
    一个30万字的中文分词词典,从网站码农场中提供的词典分割的一部分,需要说明的是词典不是最新的,仅供参考使用。
  • 在使用jiba分词的情况下,使用这个词典有助于提高你的分词准确度,因为这个分词词典包含了众多领域词汇,这些词汇出自某dog的几十个细胞词库。已使用转换器转换成txt,欢迎下载。
  • 中文分词 词典
  • 中文分词词典构造简述

    千次阅读 2014-10-05 21:49:58
    中文分词词典构造简述 在分词系统中常用的分词词典机制有:(1)基于整词二分;(2)基于TRIE索引树;(3)基于逐字二分. 一、基于整词二分的分词词典机制 这是一种广为使用的分词词典机制.其结构通常分为三级,...

    中文分词词典构造简述

    在分词系统中常用的分词词典机制有:(1)基于整词二分;(2)基于TRIE索引树;(3)基于逐字二分.

    一、基于整词二分的分词词典机制

    这是一种广为使用的分词词典机制.其结构通常分为三级,前两级为索引,如图3.1听示。

    图 3.1 基于整词二分的分词词典机制

     

    1.首字散列表

    词首字散列函数根据汉字的国标区位码给出。通过一次Hash运算即可直接定位汉字在首字散列表中的序号。也就是将词首字的国标码与其在首字散列表中的序号相对应。我国的GB2312-80标注规定汉语字符的交换码由两个ASCII码构成:第一个是区码,取值从OxA1到OxF7,共87个区,第二个是位码,从OxA1到0xFE,共94位。区码为OxA1到0xAE的存储全角符号,如标点、字母等。GB2312-80汉字的编码空间是BOA1-FIFE,共有72 * 94 = 6768个码位,实有6763个汉字,其中一级汉字3755个,接着是5个空位,后面是3008个二级汉字。设id是词首字在首字散列表中的序号,c1和c2是词首字的区码和位码,利用Hash方法求Id则有:

    Id = (c1–176) * 94 + (c2 - 161)                       (3-1)

    这种Hash方法实质上是一种一一映射。

     

    首字散列表的一个单元包括两项内容:

    1) 入口项 数(4字节):以该字为首字的词的个数。

    2) 第一入口项指针(4字节):指向第一入口项在词索引表中的位置。

     

    2.词索引表

    因为词的长度可变(实际系统中还包括附属于该词的各类信息),故以选择不定长存储为宜,此外必须实现对词的随机访问,这两条决定了必须建立词索引表。词索引表的一个单元仅含一项内容:

    1) 词典正文指针(4字节):指向词在词典正文中的位置。

     

    3.词典正文

    以词为单位的有序表,词典中的同一首字的词条按升序排列,通过词索引表和词典正文的配合,很容易实现指定词在词典正文中的整词二分快速查找。

     

    在整词二分查询任意一个汉字串W[1…n], W[1]表示该字串首字,W[n]表示首字后面的 n个汉字,查询的过程为:

    1) 根据首字散列表得到W[1]入口项指针和以它为首字的词在词索引表中所占的范围。

    2) 根据 1)中得到的范围在词典正文中对汉字串W[n]进行二分查找。如果查询成功则W [l…n]为分词词典中的一个词.

    整词二分法查询的基本原理很简单,但是每次查询都只能对汉字串W[l…n]是否为一个词进行判断,它不能从查询的中间过程中发现汉字串W[1…n]中所有可能包括的词。而且它查询的范围较大,总是在以W[1]为首字的所有词表范围内。而我们在分词过程中,需要得到一个汉字串S中所有可能切分出的词,也就是说要找出S中所有以W[1]为首字的词,如果用整词二分法来查询的话就需要进行多次的试探,即每改变一次待查字串W[1…n]的n值就要对词典进行一次查询,而且每次的查询过程都要在以W[1]为首字的所有词表范围内.因此整词二分法的查询效率不高.

     

    二、基于TRIE索引树的分词词典机制

    TRIE索引树是一种以树的多重链表形式表示的键树。

    基于TRIE树的分词词典由两部分组成,如图3.2所示。

    图 3.2 基于TRIE索引树的分词词典机制

    1.首字散列表

    同基于整 词二分的分词词典机制。首字散列表的一个单元是所对应汉字的TRIE索引树的根结点.

    2.TRIE索引树结点

    TRIE索引树结点是以下述结构为单元的,按关键字排序的数组:

    关键字(2字节):单一汉字。

    子树大小(2字节):以从根结点到当前单元的关键字组成的子串为前缓的词的个数。

    子树指针(4字节):子树大小非0时,指针指向子树,否则指向叶子。

     

    在TRIE索引树上查询任意一个词W[1…n]的过程为:

    1) 根据首字散列表得到W[1]TRIE索引树,沿相应指针移动至目标结点NODE,i = 2。

    2) 在NODE的关键字域中对汉字W[i]进行二分查找。

    如果与NODE的第 j 个单元的关键字匹配成功则沿该单元的子树指针移至目标结点,并令该结点为新的NODE,i = i + 1,否则 查找失败,退出此过程。

    3) 重做 2),直到 NODE为 叶子结点。

    4) 如果 到达叶于结点时i>n,则

    查询成功,W [l…n]为分词词典中的一个词,否则查询失败。

     

    与整词二分的分词词典机制形成鲜明对照的是:基于TRIE索引树的分词词典机制每次仅仅只比较一个汉字,不需预知待查询词的长度,且在对汉字串S的一遍扫描过程中,就能得到所有可能切分的词。这种由短词及长词的确定性工作方式避免了整词二分的分词词典机制不必要的多次试探性查询。由于TRIE索引树已蕴含了词条信息,因此词典中不必再显式地罗列词条,可直接存储词的附属信息(叶子指针直接指向这些信息)。

    TRIE索引树分词词典机制的主要缺点是其构造及维护比整词二分复杂。

     

    基于TRIE索引树的另外一种构造方式就是:所有字都采用Hash散列的方式。其结构与图3.2 基本相同,不同的是其入口项个数要么为0 要么就是整个汉字字库的大小。这种方式在查询上有显著的效率提升,因为不需要执行二分查找,但是由于中文汉字数量巨大,同时也造成了大量空间的浪费。

     

    三、基于逐字二分的分词词典机制

    基于逐字二分的分词词典是针对整词二分和TRIE索引树的不足而设计的一种分词词典。逐字二分分词词典与整词二分分词词典在数据结构上相同,因此其构造比TRIE索引树简单。从查询方式来看,逐字二分不再将整个词作为关键字进行比较,而是类似TRIE索引树的情形,每次仅仅比较单个的汉字。因而其效果同TRIE索引树一样,不需预知待查询词的长度,且在对汉字串S的一遍扫描过程中,就能得到查询串中所有可能切分的词。

    基于逐字二分分词词典,如图3.3所示。

    展开全文
  • 22万词条,供大家学习使用。中文分词词典 中文自然语言处理基础
  • 识别化工专业词汇的中文分词词典结构的设计,许南山,齐皓爽,文章介绍了适用于化工专业搜索引擎的中文分词系统中的分词词典的结构的设计,采用基于字符串匹配的分词方法,结合化工专业词汇的
  • 中文分词词典 适合最大正向匹配算法使用 共计548389条词语
  • Elasticsearch之插件es ik配置自定义中文分词词典-附件资源
  • 1. 首先需要安装好ik 可以参考本人blog ...或者github地址下载对应版本的ik: https://github.com/medcl/elasticsearch-analysis-ik 2. 配置自定义中文分词词典 如果宝宝们已经安装好ik,在es中测试分词成功...
    1. 首先需要安装好ik

    可以参考本人blog
    http://blog.csdn.net/qq_30581017/article/details/79533240
    或者github地址下载对应版本的ik:
    https://github.com/medcl/elasticsearch-analysis-ik

    2. 配置自定义中文分词词典

    如果宝宝们已经安装好ik,在es中测试分词成功的,可以添加自己的热词库与停止库
    ① cd 到自己的elasticsearch-6.2.2/config/analysis-ik目录下,可以看到有很多dic(dictionary字典),ik也是基于词典进行分词的
    ②新建目录custom

    mkdir custom
    ③新建txt文件或dic文件,或者下载词典库(我是复制ik的dic文件并加上自己的短语做测试),如下所示,本人里面加了拓展文件ext.txt”逼格”词语,拓展停止文件english_stopword.txt “java”词语
    这里写图片描述

    !!!这里一定要注意一定要从第二行开始写入词语或短语,ik不读第一行的词语哦

    ④配置ik自定义词典配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
    <properties>
            <comment>IK Analyzer 扩展配置</comment>
            <!--用户可以在这里配置自己的扩展字典 -->
            <entry key="ext_dict">custom/ext.txt</entry>
             <!--用户可以在这里配置自己的扩展停止词字典-->
            <entry key="ext_stopwords">custom/english_stopword.txt</entry>
            <!--用户可以在这里配置远程扩展字典 -->
            <!-- <entry key="remote_ext_dict">words_location</entry> -->
            <!--用户可以在这里配置远程扩展停止词字典-->
            <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
    </properties>
    

    ⑤重启es服务
    这里写图片描述
    可以看到已经加载出来了

    ⑥测试
    本人安装的es的图形工具kibana,创建索引,创建映射,分词检测

    PUT testindex
    
    
    POST testindex/test/_mapping
    {
      "properties": {
        "content":{
          "type": "text",
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_max_word"
        }
      }
    }
    
    
    POST testindex/_analyze
    {
      "field": "content",
      "text": ["java 是个 逼格高技术"]
    
    }

    分词结果如下,可以看到java被停止,逼格被拓展,嘻嘻,还不错

    {
      "tokens": [
        {
          "token": "是",
          "start_offset": 5,
          "end_offset": 6,
          "type": "CN_CHAR",
          "position": 0
        },
        {
          "token": "个",
          "start_offset": 6,
          "end_offset": 7,
          "type": "CN_CHAR",
          "position": 1
        },
        {
          "token": "逼格",
          "start_offset": 8,
          "end_offset": 10,
          "type": "CN_WORD",
          "position": 2
        },
        {
          "token": "高技术",
          "start_offset": 10,
          "end_offset": 13,
          "type": "CN_WORD",
          "position": 3
        },
        {
          "token": "高技",
          "start_offset": 10,
          "end_offset": 12,
          "type": "CN_WORD",
          "position": 4
        },
        {
          "token": "技术",
          "start_offset": 11,
          "end_offset": 13,
          "type": "CN_WORD",
          "position": 5
        }
      ]
    }

    附上本人的拓展词典和拓展停止词典txt,仅供测试
    链接: https://pan.baidu.com/s/1GRlDa45BOEQuOi7M2pRWrQ 密码: mrpw
    链接: https://pan.baidu.com/s/1PUltSp-8jvxWwEu2GtiJ2g 密码: pwm9

    展开全文
  • 人民日报统计出来的用于自然语言处理的中文词典
  • 中文分词词典。按照长度分成2/3/4/5四个文件,剔除稀有冷门的词,适合常规的项目开发使用。本人项目中就在使用。好用不贵!
  • 在研究了多种分词词典机制的基础上,提出一种改进的词典机制.在传统的首字哈希表中增加拼音首字母和次字哈希标志项。在首字哈希表中查询次字的拼音首字母,根据双字以上词的数量决定是否按次字拼音首字母散列到次字...
  • 一种中文分词词典新机制——双字哈希机制.pdf
  • 文本词典 中文分词 分词文本 纯文本词典 中文分词 分词文本 文本词典 信息检索
  • 盘古分词-开源中文分词组件词典PanGu_ReleaseV1.1.0.1
  • 分词中文停止词词典

    2018-02-25 16:53:07
    分词 中文 停止词 词典 分词 中文 停止词 词典 分词 中文 停止词 词典 分词 中文 停止词 词典
  • Stanford Corenlp是斯坦福大学的自然语言处理工具,其中中文分词是基于条件随机场CRF (Conditional Random Field) ,不是基于字典的直接匹配。最近调用Stanford Word Segmenter进行中文分词时,发现一些tokens切割不...

    Stanford Corenlp是斯坦福大学的自然语言处理工具,其中中文分词是基于条件随机场CRF (Conditional Random Field) ,不是基于字典的直接匹配。最近调用Stanford Word Segmenter进行中文分词时,发现一些tokens切割不符合我们的预期,比如“大数据”被切分为“大 / 数据”,“信息安全”切分为“信息 / 安全”, “草泥马”被切分为草 / 泥马。我们希望将某些特定的词作为一个token来处理,因此想通过增加自定义词典(扩展词典)来实现。

    一.网络上已有的资源

    为了解决Stanford Corenlp中文分词自定义词典问题,前后耗费了大概有2- 3天的时间,几乎查找了内外网所有相关的资源,为了避免后面的童鞋再走弯路,下面归纳分析网络上关于此问题的资源:

    1. Stanford Corenlp + IKAnalyzer

    https://www.cnblogs.com/whuqin/p/6149742.html (还有一系列雷同文章)
    这个方法看起来好像有些可行,模仿ChineseSegmenterAnnotator实现IKSegmentAnnotator,比较了这两个类,主要区别在于这两个方法
    IKSegmentAnnotator

    private List<String> splitWords(String str) throws Exception{...}
    

    ChineseSegmenterAnnotator

    private void splitCharacters(CoreMap annotation) {...}
    

    我认为该方法就是把stanford的分词器(基于CRF)换成了IKAnalyzer的分词器IKSegmenter(基于词典匹配),代码不全,也没有任何注释,还要研究IKAnalyzer指定扩展词典和删除词典。对于仅应用分词而非研究分词的人来说,很难搞清楚,反正我是没运行成功,如果有小伙伴明白这种处理方法,请多多指教。

    2. 引入自定义词典

    https://blog.csdn.net/dushenzhi/article/details/8734173
    下面把这段代码我能看懂的部分进行解释

    java -mx1g -cp seg.jar edu.stanford.nlp.ie.crf.CRFClassifier
     //-mx1g 指定运行内存
    //-cp 或者-classpath也可以,指定jar包路径
    /* seg.jar分词jar包,在stanford-segmenter-2018-10-16文件夹下面,我下载下来的分词jar包命名是 stanford-segmenter-3.9.2.jar*/
         -sighanCorporaDict data
         -loadClassifier data/ctb.gz
         -testFile preprocess-$1.txt  //测试文件,即要分词的文本
         -inputEncoding UTF-8    //urf-8编码
         -sighanPostProcessing true
         -serDictionary data/dict-chris6.ser.gz,data/cedict.txt,data/ntusd.txt  
         //分词词典为原词典data/dict-chris6.ser.gz和自定义的词典data/cedict.txt,data/ntusd.txt(自定义词典可以有多个)
         -keepAllWhitespaces false >$1_seged.txt
         //分词结果输出到文件$1_seged.txt
    

    下面来运行这段代码
    测试文本,preprocess-$1.txt中的内容:大数据时代,信息安全尤为重要
    采用原始词典的分词结果为:大 / 数据 / 时代,信息 / 安全 / 尤为 / 重要
    自定义词典,cedict.txt的内容:
    大数据
    信息安全
    在这里插入图片描述分词结果
    在这里插入图片描述
    再来测试一个文本:昨天我看见一只草泥马
    用原始词典分词
    在这里插入图片描述
    增加自定义词典:草泥马
    分词结果
    在这里插入图片描述
    两个测试结果均不符合扩展词典中定义的分词规则,暂时认为这种方法自定义词典不起作用,如果有小伙伴测试到起作用的样本,告诉我哦

    3. 一大波僵尸操作

    https://blog.csdn.net/a313827758/article/details/87977576
    这一波操作反正我是看的稀里糊涂

    segment.serDictionary = edu/stanford/nlp/models/segmenter/chinese/dict-chris6.ser.gz,yourDictionaryFile
    

    配置词典属性在stanford-chinese-corenlp-2018-10-05-models/StanfordCoreNLP-chinese.properties中修改,用notepad++打开修改后直接保存就可以,但是这里没有交代清楚yourDictionaryFile怎么生成 (后面我会提到)
    网上能找到的该问题解决方案大概也就分这3类,能力有限,非专业研究分词,如果有错误请及时指出。

    二、Stanford Corenlp官网给出的方法

    https://nlp.stanford.edu/software/segmenter-faq.html
    以前这个链接只有第一个问题关于retrain the Chinese Segmenter。今天再打开竟然多了第二个问题,how i can add words to the dictionary,如何往词典中加词,这不就是增加语料、增加自定义词典嘛。激动的是,我昨天才刚刚给stanford发了邮件,沟通关于自定义词典的事情,今天官网就更新了,我就默认是我的功劳吧,小有成就感,官方的效率好高

    1. 翻译和解释

    问题1:怎么重新训练中文分词器
    <1>准备语料
    在这里插入图片描述
    语料数据集按照如图所示的格式,每个句子占一行,词与词之间用空格隔开
    <2>转化为Penn trees(不知道咋翻译,google译为:宾夕法尼亚树)格式
    其中一种方法是利用这个工具 Treebanks tool,这个工具不在segmenter的下载文件中,在corenlp-full中,下面给出路径
    stanford-corenlp-full-2018-10-05\stanford-corenlp-3.9.2.jar\edu\stanford\nlp\trees\Treebanks.class
    执行这行命令转化格式

    java edu.stanford.nlp.trees.Treebanks -words ctb7.mrg
    

    但是我没找到ctb7.mrg这个文件
    <3>还可以包含一些命名实体识别的词,如姓名、地点、公司名等,每行一个词
    在这里插入图片描述
    用这个命令把这些词转化成词典格式

    java edu.stanford.nlp.wordseg.ChineseDictionary -inputDicts names.txt,places.txt,words.txt,... -output dict.ser.gz
    

    edu.stanford.nlp.wordseg.ChineseDictionary在stanford-segmenter-2018-10-16/stanford-segmenter-3.9.2.jar里面,names.txt,places.txt,words.txt里面放的是你想增加的词,可以有多个txt文件,dict.ser.gz为输出结果
    下面是我的代码

    在这里插入图片描述mywords.txt中的内容
    大数据
    信息安全
    网络安全
    dict.ser.gz中的内容(咱也看不懂是啥^^)
    在这里插入图片描述
    这里有个想法,可以把生成的dict.ser.gz放在一.3 yourDictionaryFile的位置,但是我尝试过好像对分词结果没什么影响。 有兴趣的小伙伴可以再尝试
    <4>如果要在原来词典dict-chris6.ser.gz的基础上增加词典,用下面这个命令

     java -mx15g edu.stanford.nlp.ie.crf.CRFClassifier -prop ctb.prop -serDictionary dict-chris6.ser.gz -sighanCorporaDict data -trainFile train.txt -serializeTo newmodel.ser.gz > newmodel.log 2> newmodel.err
    

    edu.stanford.nlp.ie.crf.CRFClassifier在stanford-segmenter-2018-10-16/stanford-segmenter-3.9.2.jar里面,下面是我执行的命令
    在这里插入图片描述生成newmodel.err, newmodel.log和newmodel.ser.gz,新生成的newmodel.ser.gz比原来的词典dict-chris6.ser.gz小的多,说明新词典中只包含新加入的词(train.txt中的词),而不是把新词和原始词典结合在一起
    在这里插入图片描述
    到这里为止第一个问题的答案解释完了,好奇心驱使我用新词典替换掉原始词典,嗯。。。报错了
    在这里插入图片描述
    问题在于ArrayList不能转化为Set,又掉坑里了,分别打开新旧词典一查到底
    原始词典的文件头HashSet:
    在这里插入图片描述
    新生成的词典文件头ArrayList
    在这里插入图片描述
    我也不知道为啥,全部操作都是按照官方的命令,也没有错误!!!

    三. 官方权威回复

    使出浑身解数,搞了2天实在没招了,抱着最后一点点希望,给stanford发了邮件,没想到Stanford老师的效率这么高,24小时之内就回复我了,发件人名字竟然是John Bauer(应该是原创开发者之一),解释的非常详细,第一次这么近距离跟大佬对话,激动!!!我还找了Stanford John Bauer的照片^^

    1.Email round 1

    我:为什么新生成的词典与原始词典格式不同(HashSet vs. ArrayList)
    这个问题没有正面回答
    我:官网说新词典是基于原始词典训练生成的,为什么size小那么多
    Answer The command you gave it will only train on the given sentences. You need a complete training corpus with a large number of training sentences to retrain the segmenter. Unfortunately, we cannot share our existing corpus because of licensing restrictions.

    The dict file is a dictionary composed of a bunch of the words in the training file. I suppose you could manually expand it (see edu.stanford.nlp.wordseg.ChineseDictionary), add a few words, and re-serialized it. Unfortunately, there isn’t a ton of support right now for doing that.
    我:如何生成新词典,生成后在哪里替换旧词典
    Answer 在这里插入图片描述----------------------------------------------------------------------------------------------------------------------------------
    我按照邮件中给出的方法操作

    生成新词典(新词+原始词典结合在一起)
    在这里插入图片描述
    运行segDemo,替换旧词典
    在这里插入图片描述结果
    在这里插入图片描述
    竟然结果还不对,真是期望越大,失望越大,啊啊啊==

    Round 2

    再次邮件骚扰
    为什么分词结果不符合自定义的词典呢?
    直接贴邮件回复,老师也太nice了,各种生动的例子,看到草泥马我乐了好半天,估计老师是google直接翻译的吧,哈哈哈
    在这里插入图片描述结论分词器只是参照自定义的语料,并非是强制的分词边界,毕竟Stanford segmenter是基于CRF,不是词典强制分词,这也就能解释有些新词works,有些却无效。
    ---------------------------------------------------------------End -----------------------------------------------------------------
    全程边执行命令,边截图,边码字,眼睛要瞎了,先写到这里,很多细节都没提到,比如涉及到的所有.txt都要用utf-8 noBOM编码,用notepad++修改编码为utf-8。细节后面再补充,如果各位小伙伴操作有什么问题直接留言

    展开全文
  • 中文分词词库词典,支持频率统计如: 33 ℃ 1 34 阿 257 35 阿巴丹 1 36 阿巴岛 1 37 阿巴鸟 8 38 阿巴伊达 1 39 阿坝 2 40 阿爸 12 41 阿北乡 1 42 阿比林市 1 43 阿比让 46 44 阿比让港 1 45 阿比让市...
  • elasticsearch整合ik分词器时,自定义...最近在研究elasticsearch,在整合ik分词器的时候配置自定义词典时,发现无法生效,最终发现原来是编windows系统下编码的问题 .默认是ANSI改为UTF-8即可 此外,ik分词器配置多个...

    elasticsearch整合ik分词器时,自定义分词器的配置方法


    elasticsearch整个ik分词器时,自定义分词器的配置方法

    欢迎使用Markdown编辑器

    最近在研究elasticsearch,在整合ik分词器的时候配置自定义词典时,发现无法生效,最终发现原来是编windows系统下编码的问题 .默认是ANSI改为UTF-8即可
    在这里插入图片描述
    此外,ik分词器配置多个自定义词典时IKAnalyzer.cfg.xml文件配置方式错误配置方式:
    这样会导致最后一个配置覆盖前面的
    这样会导致最后一个词典配置覆盖前面的;
    正确配置方式:
    在这里插入图片描述
    多个词典分号隔开
    Alt

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,954
精华内容 5,981
关键字:

中文分词词典