精华内容
下载资源
问答
  • Elasticsearch 多语言及中文分词与检索详解
    2020-11-18 17:58:17

    1. 自然语言与查询 Recall

    当处理人类自然语言时,有些情况,尽管搜索和原文不完全匹配,但是希望搜到一些内容

    • Quick brown fox 和 fast brown fox / Jumping fox 和 Jumped foxes

    一些可采取的优化

    • 归一化词元:清除变音符号,如 role 的的时候 也会匹配 role
    • 抽取词根:清除单复数和时态的差异
    • 包含同义词
    • 拼写错误:拼写错误,或者同音异形词

    2. 混合多语言的挑战

    一些具体的多语言场景

    • 不同的索引使用不同的语言 / 同一索引中,不同的字段使用不同的语言 / 一个文档的一个字段内混合不同的语言

    混合语言存在的一些挑战

    • 次干提取:以色列文档,包含了希伯来语,阿拉伯语,俄语和英文
    • 不争取的文档频率 - 英文为主的文章中,德文算分高(稀有)
    • 需要判断用户搜索时使用的语言,语言识别(Compact Language Detecor)
      例如,根据语言查询不同的索引

    3. 分词的挑战

    英文分词:You’re 分成一个还是多个?Half -baked
    中文分词

    • 分词的标椎:哈工大标椎中,姓和名分开。HanLP 是在一起的。具体情况需制定不同的标椎
    • 歧义(组合型歧义,交际型歧义,真歧义)
      中华人民共和国 / 美国会通过对台收武器法案 / 上海仁和服装厂

    4. 中文分词方法的演变 - 字典法

    查字典 - 最容易想到的分词方法(北京航空大学的梁南元教授提出)

    • 一个句子从左到到右扫描一遍。遇到有点词就标识出来。找到复合词,就找最长的
    • 不认识的字符串就分割成单字词

    最小词数的分词理论 - 哈工大王晓龙博士吧查字典的方法理论化

    • 一句话应该分词数量最少的词串
    • 遇到二义性的分割,无能为力(例如:“发展中国家”/“上海大学城书店”)
    • 用各种文化规则来解决二义性,都并不成功

    5. 中文分词方法的演变 - 基于统计法的机器学习算法

    统计语言模型 - 1990 年前后 ,清华大学电子工程系郭进博士

    • 解决了二义性问题,将中文分词的错误率降低了一个数据级。概率问题,动态规划 + 利用维特比算法快速找到最佳分词

    基于统计的机器学习算法

    • 这类目前常用的算法是 HMM、CRF、SVM、深度学习算法等算法。比如 Hanlp 分词工具是基于 CRF算法为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具有较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的下效果随着深度学习的兴起,也出现了基于神经网路的分词器,有人尝试使用双向 LSTM + CRF实现分词器,其本质上是序列标注,据报道其分词器字符准确率可高达 97.5%

    6. 中文分词器现状

    中文分词器以统计语言模型为基础,经过几十年的发展,今天基本已经可以看做是一个已经解决的问题
    不同分词器的好坏,主要的差别在于数据的使用和工程使用的精度
    常见的分词器都是使用机器学期算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性

    7. 一些中文分词器

    • HanLP - 面向生产环境的自然语言处理包
    • IK 分词器

    7.1 HanLP

    ./elasticsearch-plugin install https://github.com/KennFalcon/elasticsearc…

    7.2 IK Analysis

    /elasticsearch-plugin install https://github.com/medcl/elasticsearch-ana…

    7.3 拼音

    ./elasticsearch-plugin install https://github.com/medcl/elasticsearch-ana…

    7.4 中文分词 DEMO

    • 使用不同分词器测试效果
    • 索引时,尽量切分的短,查询的时候,尽量用长的词
    • 拼音分词器
    #安装插件
    ./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.0/elasticsearch-analysis-ik-7.1.0.zip
    #安装插件
    bin/elasticsearch install https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases/download/v7.1.0/elasticsearch-analysis-hanlp-7.1.0.zip
    
    docker exec -it es7_01 bash
    mkdir /usr/share/elasticsearch/plugins/hanlp
    docker cp elasticsearch-analysis-hanlp-7.1.0.zip es7_02:/usr/share/elasticsearch/plugins/hanlp
    docker exec -it es7_01 bash
    cd /usr/share/elasticsearch/plugins/hanlp
    unzip elasticsearch-analysis-hanlp-7.1.0.zip 
    rm -rf elasticsearch-analysis-hanlp-7.1.0.zip 
    
    #ik_max_word
    #ik_smart
    #hanlp: hanlp默认分词
    #hanlp_standard: 标准分词
    #hanlp_index: 索引分词
    #hanlp_nlp: NLP分词
    #hanlp_n_short: N-最短路分词
    #hanlp_dijkstra: 最短路分词
    #hanlp_crf: CRF分词(在hanlp 1.6.6已开始废弃)
    #hanlp_speed: 极速词典分词
    
    POST _analyze
    {
      "analyzer": "hanlp_standard",
      "text": ["剑桥分析公司多位高管对卧底记者说,他们确保了唐纳德·特朗普在总统大选中获胜"]
    
    }     
    
    #Pinyin
    PUT /artists/
    {
        "settings" : {
            "analysis" : {
                "analyzer" : {
                    "user_name_analyzer" : {
                        "tokenizer" : "whitespace",
                        "filter" : "pinyin_first_letter_and_full_pinyin_filter"
                    }
                },
                "filter" : {
                    "pinyin_first_letter_and_full_pinyin_filter" : {
                        "type" : "pinyin",
                        "keep_first_letter" : true,
                        "keep_full_pinyin" : false,
                        "keep_none_chinese" : true,
                        "keep_original" : false,
                        "limit_first_letter_length" : 16,
                        "lowercase" : true,
                        "trim_whitespace" : true,
                        "keep_none_chinese_in_first_letter" : true
                    }
                }
            }
        }
    }
    
    
    GET /artists/_analyze
    {
      "text": ["刘德华 张学友 郭富城 黎明 四大天王"],
      "analyzer": "user_name_analyzer"
    }
    

    参考资料:
    极客时间:Elasticsearch核心技术与实战
    相关阅读:
    初学elasticsearch入门
    Elasticsearch本地安装与简单配置
    docker-compose安装elasticsearch集群
    Elasticsearch 7.X之文档、索引、REST API详解
    Elasticsearch节点,集群,分片及副本详解
    Elasticsearch倒排索引介绍
    Elasticsearch Analyzer 进行分词详解
    Elasticsearch search API详解
    Elasticsearch URI Search 查询方法详解
    Elasticsearch Request Body 与 Query DSL详解
    Elasticsearch Dynamic Mapping 和常见字段类型详解
    Eelasticsearch 多字段特性及 Mapping 中配置自定义 Analyzer详解
    Elasticsearch index template与dynamic template详解
    Elasticsearch 聚合分析简介
    Elasticsearch 第一阶段总结与测试
    Elasticsearch 基于词项和基于全文的搜索详解
    Elasticsearch 结构化搜索详解
    Elasticsearch 搜索的相关性算分详解
    Elasticsearch Query & Filtering 与 多字符串多字段查询详解
    Elasticsearch 单字符串多字段查询:Dis Max Query详解
    Elasticsearch 单字符串多字段查询: Multi Match详解
    Elasticsearch 多语言及中文分词与检索详解

    更多相关内容
  • 快速,准确的越南分词器 如所述,RDRsegmenter的实现: @InProceedings{NguyenNVDJ2018, author={Dat Quoc Nguyen and Dai Quoc Nguyen and Thanh Vu and Mark Dras and Mark Johnson}, title={{A Fast and ...
  • word分词器java源码Vitk——越南语文本处理工具包 注意:此存储库现已过时。 有兴趣的程序员应该考虑使用新的 repo vlp (github.com/phuonglh/vlp) 自 2016 年以来,我们更喜欢使用 Scala 而不是 Java。 注意:2018 ...
  • Nodejs和Javascript中越南语的分词器。 安装方式 通过NPM npm install node-vntokenizer --save 通过鲍尔 bower install tokenizer --save 样本 var Tokenizer = require ( 'node-vntokenizer' ) ; var token = ...
  • 是一个用于越南分词的工具包。 它使用基于最长匹配与逻辑回归的混合方法。 UETsegmenter 是用 Java 编写的,并在 Esclipse IDE 中开发。 笔记 UETsegmenter 继承于 . UETnlp 是越南语文本处理工具包,可用于分词和...
  • ElasticSearch分词器

    千次阅读 2022-02-16 17:56:34
    所有的语言分词,默认使用的都是“Standard Analyzer”,但是这些分词器针对于中文的分词,并不友好。为此需要安装中文的分词器。 下面以IK分词器为例: 下载分词器 # 进入ElasticSearch容器下载(或者在外部关联文件...

    所有的语言分词,默认使用的都是“Standard Analyzer”,但是这些分词器针对于中文的分词,并不友好。为此需要安装中文的分词器。

    下面以IK分词器为例:

    下载分词器

    # 进入ElasticSearch容器下载(或者在外部关联文件进行下载)
    docker exec -it elasticsearch /bin/bash
    # 下载分词器
    wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
    # 解压分词器到ik目录中
    unzip elasticsearch-analysis-ik-7.4.2.zip -d ik
    # 移动ik到plugins目录下
    mv ik plugins/
    # 赋予ik目录权限
    chmod -R 777 plugins/ik
    # 重新启动es
    docker restart elasticsearch
    

    standard

    默认分词器,不指定就是它。

    GET _analyze
    {
       "analyzer": "standard",
       "text":"我是中国人"
    }
    
    {
      "tokens" : [
        {
          "token" : "我",
          "start_offset" : 0,
          "end_offset" : 1,
          "type" : "<IDEOGRAPHIC>",
          "position" : 0
        },
        {
          "token" : "是",
          "start_offset" : 1,
          "end_offset" : 2,
          "type" : "<IDEOGRAPHIC>",
          "position" : 1
        },
        {
          "token" : "中",
          "start_offset" : 2,
          "end_offset" : 3,
          "type" : "<IDEOGRAPHIC>",
          "position" : 2
        },
        {
          "token" : "国",
          "start_offset" : 3,
          "end_offset" : 4,
          "type" : "<IDEOGRAPHIC>",
          "position" : 3
        },
        {
          "token" : "人",
          "start_offset" : 4,
          "end_offset" : 5,
          "type" : "<IDEOGRAPHIC>",
          "position" : 4
        }
      ]
    }
    

    ik_smart

    会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。

    GET _analyze
    {
       "analyzer": "ik_smart", 
       "text":"我是中国人"
    }
    
    {
      "tokens" : [
        {
          "token" : "我",
          "start_offset" : 0,
          "end_offset" : 1,
          "type" : "CN_CHAR",
          "position" : 0
        },
        {
          "token" : "是",
          "start_offset" : 1,
          "end_offset" : 2,
          "type" : "CN_CHAR",
          "position" : 1
        },
        {
          "token" : "中国人",
          "start_offset" : 2,
          "end_offset" : 5,
          "type" : "CN_WORD",
          "position" : 2
        }
      ]
    }
    

    ik_max_word

    会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民共和国、人民、共和国、大会堂、大会、会堂等词语。

    GET _analyze
    {
       "analyzer": "ik_max_word", 
       "text":"我是中国人"
    }
    
    {
      "tokens" : [
        {
          "token" : "我",
          "start_offset" : 0,
          "end_offset" : 1,
          "type" : "CN_CHAR",
          "position" : 0
        },
        {
          "token" : "是",
          "start_offset" : 1,
          "end_offset" : 2,
          "type" : "CN_CHAR",
          "position" : 1
        },
        {
          "token" : "中国人",
          "start_offset" : 2,
          "end_offset" : 5,
          "type" : "CN_WORD",
          "position" : 2
        },
        {
          "token" : "中国",
          "start_offset" : 2,
          "end_offset" : 4,
          "type" : "CN_WORD",
          "position" : 3
        },
        {
          "token" : "国人",
          "start_offset" : 3,
          "end_offset" : 5,
          "type" : "CN_WORD",
          "position" : 4
        }
      ]
    }
    

    自定义词库

    我想分词“乔碧萝殿下”,但是“乔碧萝”ik分词器词库可能没有。

    所以这里我们要通过Nginx,它把当做一个静态服务器,把词库放到静态服务器上,es就可以读取到了。

    安装Nginx

    # 随便启动一个Nginx实例 为了获取它的配置
    docker run -p80:80 --name nginx -d nginx:1.10
    # 将nginx容器内的配置文件拷贝到/mydata下
    docker container cp nginx:/etc/nginx  /mydata
    cd mydata/
    # 把拷贝下来的文件夹改名
    mv nginx conf
    # 创建一个新的名为ngin的目录
    mkdir nginx
    # 把拷贝的配置已经去 这样就和启动Nginx时的配置文件的路径一致了
    mv conf nginx
    # 停止原来的容器 并删除掉
    docker stop nginx
    docker rm nginx
    # 创建新的容器 挂载各种配置信息
    docker run -p 80:80 --name nginx \
     -v /mydata/nginx/html:/usr/share/nginx/html \
     -v /mydata/nginx/logs:/var/log/nginx \
     -v /mydata/nginx/conf/:/etc/nginx \
     -d nginx:1.10
    # 设置开机自动启动nginx
    docker update nginx --restart=always
    

    把词库放到Nginx目录中

    mkdir /mydata/nginx/html/es
    cd /mydata/nginx/html/es
    # 在词库里面 输入 “乔碧萝”
    echo "乔碧萝" > /mydata/nginx/html/fenci.txt 
    

    测试结果

    GET _analyze
    {
       "analyzer": "ik_max_word", 
       "text":乔碧萝殿下"
    }
    
    {
      "tokens" : [
        {
          "token" : "乔碧萝",
          "start_offset" : 0,
          "end_offset" : 3,
          "type" : "CN_WORD",
          "position" : 0
        },
        {
          "token" : "殿下",
          "start_offset" : 3,
          "end_offset" : 5,
          "type" : "CN_WORD",
          "position" : 1
        }
      ]
    }
    
    展开全文
  • 用于Elasticsearch的越南语分析插件 越南语分析插件将越南语分析集成到Elasticsearch中。 它使用由CocCoc团队为其搜索引擎和广告系统开发的图书馆使用的。 该插件提供vi_analyzer分析, vi_tokenizer标记和vi_...
  • 使用BERT的越南语NER(bert-... 请注意,分词不用于匹配BERT的预训练(以bert-base-multilingual-cased表示) 。 有关详细信息,请参见“数据”目录中的样本数据。 下表描述了数据集中的越南语例句示例。 单词 销售点
  • VnCoreNLP是越南语的NLP注释管道,它通过分词, POS标记,命名实体识别(NER)和依赖项解析等关键NLP组件提供丰富的语言注释: 准确– VnCoreNLP是越南语NLP的最准确的工具包,可在标准基准数据集上获得最新的结果...
  • 中日韩统一表意文字(CJK Unified Ideographs),目的是要把分别来自中文、日文、韩文、越文中,本质、意义相同、形状一样或稍异的表意文字(主要为汉字,但也有仿汉字如日本国字、韩国独有汉字、越南的喃字)于ISO ...

    其中CJK中日韩统一表意文字(CJK Unified Ideographs),目的是要把分别来自中文、日文、韩文、越文中,本质、意义相同、形状一样或稍异的表意文字(主要为汉字,但也有仿汉字如日本国字、韩国独有汉字、越南的喃字)于ISO 10646及Unicode标准内赋予相同编码。CJK 是中文(Chinese)、日文(Japanese)、韩文(Korean)三国文字的缩写。顾名思义,它能够支持这三种文字。

    实际上,CJKAnalyzer支持中文、日文、韩文和朝鲜文。

    CJKAnalyzer的所有类:


    CJKAnalyzer是主类

    CJKWidthFilter是负责格式化字符,主要是折叠变种的半宽片假名成等价的假名  

    CJKBigramFilter是负责把两个CJK字符切割成两个,只要是CJK字符就会两两切割,ABC->AB,BC

    CJKTokenizer是兼容低版本的分析器

    1.CJKAnalyzer的主要部分,可以看出,先判断版本号,低版本直接用CJKTokenizer,高版本的先用standardanalyzer把非英文字母数字一个个分开,再用CJKWidthFilter格式化CJK字符,再用LowerCaseFilter转换英文成小写,再用CJKBigramFilter把CJK字符切割成两两的。

    protected TokenStreamComponents createComponents(String fieldName,
          Reader reader) {
        if (matchVersion.onOrAfter(Version.LUCENE_36)) {
          final Tokenizer source = new StandardTokenizer(matchVersion, reader);
          // run the widthfilter first before bigramming, it sometimes combines characters.
          TokenStream result = new CJKWidthFilter(source);
          result = new LowerCaseFilter(matchVersion, result);
          result = new CJKBigramFilter(result);
          return new TokenStreamComponents(source, new StopFilter(matchVersion, result, stopwords));
        } else {
          final Tokenizer source = new CJKTokenizer(reader);
          return new TokenStreamComponents(source, new StopFilter(matchVersion, source, stopwords));
        }
      }
    2. CJKWidthFilter的部分主要是折叠变种的半宽片假名成等价的假名,有点类似全角符号转换成半角符号,含义是一样的,但是表示不一样,主要针对日文。

    3.CJKBigramFilter,该fileter可以选择既输出单字切割,同时也输出双字切割;或者只输出双字切割

    public boolean incrementToken() throws IOException {
        while (true) {
        //判断之前是否暂存了双CJK字符  
           if (hasBufferedBigram()) {
            
            // case 1: we have multiple remaining codepoints buffered,
            // so we can emit a bigram here.
            //如果选择了要输出单字切割
            if (outputUnigrams) {
    
              // when also outputting unigrams, we output the unigram first,
              // then rewind back to revisit the bigram.
              // so an input of ABC is A + (rewind)AB + B + (rewind)BC + C
              // the logic in hasBufferedUnigram ensures we output the C, 
              // even though it did actually have adjacent CJK characters.
    
              if (ngramState) {
                flushBigram();//写双字
              } else {
                flushUnigram();//写单字,然后后退一个字符(rewind)
                index--;
              }
             //这个个对应上面的判断,实现双字输出
              ngramState = !ngramState;
            } else {
              flushBigram();
            }
            return true;
          } else if (doNext()) {
    
            // case 2: look at the token type. should we form any n-grams?
            
            String type = typeAtt.type();
               //判断字符属性,是否是CJK字符
            if (type == doHan || type == doHiragana || type == doKatakana || type == doHangul) {
              
              // acceptable CJK type: we form n-grams from these.
              // as long as the offsets are aligned, we just add these to our current buffer.
              // otherwise, we clear the buffer and start over.
              
              if (offsetAtt.startOffset() != lastEndOffset) { // unaligned, clear queue
                if (hasBufferedUnigram()) {
                  
                  // we have a buffered unigram, and we peeked ahead to see if we could form
                  // a bigram, but we can't, because the offsets are unaligned. capture the state 
                  // of this peeked data to be revisited next time thru the loop, and dump our unigram.
                  
                  loneState = captureState();
                  flushUnigram();
                  return true;
                }
                index = 0;
                bufferLen = 0;
              }
              refill();
            } else {
              
              // not a CJK type: we just return these as-is.
              
              if (hasBufferedUnigram()) {
                
                // we have a buffered unigram, and we peeked ahead to see if we could form
                // a bigram, but we can't, because its not a CJK type. capture the state 
                // of this peeked data to be revisited next time thru the loop, and dump our unigram.
                
                loneState = captureState();
                flushUnigram();
                return true;
              }
              return true;
            }
          } else {
            
            // case 3: we have only zero or 1 codepoints buffered, 
            // so not enough to form a bigram. But, we also have no
            // more input. So if we have a buffered codepoint, emit
            // a unigram, otherwise, its end of stream.
            
            if (hasBufferedUnigram()) {
              flushUnigram(); // flush our remaining unigram
              return true;
            }
            return false;
          }
        }
      }




     

    展开全文
  • 工具简介对文本进行处理或分析时,我们往往会对其进行分词、词性标注等。目前开源可用的工具有Jieba、HanLP、ltp等。今天要介绍一款来自斯坦福NLP研究组的高质量的开源自然语言处理工具 Stanford CoreNLP,主要功能...

    工具简介

    对文本进行处理或分析时,我们往往会对其进行分词、词性标注等。目前开源可用的工具有Jieba、HanLP、ltp等。今天要介绍一款来自斯坦福NLP研究组的高质量的开源自然语言处理工具 Stanford CoreNLP,主要功能有分词、词性标注、命名实体识别、短语结构分析、依存句法分析。

    相较于市面上较为流行的自然语言处理工具,Stanford CoreNLP主要有以下优势:训练语料标注质量较高,中英文语料来自著名的宾州树库,因而自动标注的质量也较好,适用于对标注准确率要求较高的领域,如语言学研究等。

    一站式服务,该工具集成了自然语言处理的常用功能。

    性能高,支持并行(多条句子同时)分析。

    但Stanford CoreNLP是用Java编写的,调用较为复杂,因此我将python调用方式进行了封装,并发布了pip包(corenlp-client),方便用户使用。安装方式为:

    pip install corenlp_client

    快速入门

    调用该工具对文本进行分词,只需3行代码:

    from corenlp_client import CoreNLP # 导入CoreNLP类

    annotator = CoreNLP(url="https://corenlp.run", lang="zh") # 创建标注器对象

    print(annotator.tokenize("今天天气不错!我想去故宫博物院。")) # 分词

    返回的是一个分词后的句子列表:

    [['今天', '天气', '不错', '!'], ['我', '想', '去', '故宫', '博物院', '。']]

    如果不想进行分句,可指定ssplit参数为False:

    print(annotator.tokenize("今天天气不错!我想去故宫博物院。",ssplit=False))

    返回的就是分词列表:

    ['今天', '天气', '不错', '!', '我', '想', '去', '故宫', '博物院', '。']

    词性标注/命名实体识别:

    annotator.pos_tag("今天天气不错!我想去故宫博物院。")

    annotator.ner("今天天气不错!我想去故宫博物院。")

    结果如下(词性标注的格式与分词一致,命名实体每句的元素是一个字典,key为实体和实体的token span构成的元组,方便对应分词后的结果,value为实体类别):

    [['NT', 'NN', 'VA', 'PU'], ['PN', 'VV', 'VV', 'NR', 'NN', 'PU']]

    [[{('今天', (0, 1)): 'DATE'}], [{('故宫博物院', (3, 5)): 'FACILITY'}]]

    本地调用

    上文介绍的调用CoreNLP的方式都是调用在线的api,由于网络延迟等原因,返回结果的速度较慢且可能会因网络问题断连。因此,推荐使用本地启动CoreNLP Server后,再进行调用。安装Java

    需要注意的是,启动CoreNLP Server前您的电脑必须安装Java 8。Java 8的安装非常简单,可以通过访问官网下载(速度可能会慢一些),或通过我分享的网盘链接下载安装即可。

    (安装完成后在可通过命令行中输入java -version确认安装成功)

    2. 下载模型

    Java安装成功后,分别下载CoreNLP官网提供的压缩包及相应的语言的模型(如果想对中文进行处理则下载中文),然后将中文模型(.jar文件)放入解压后的CoreNLP压缩包中即可。官方的下载源在国外,速度较慢。国内用户可以通过我的网盘链接下载,链接提供的压缩包已包含了中文和英文的模型,无需额外下载。

    CoreNLP官网下载地址:Download

    3. 启动CoreNLP Server

    启动Server的方式有两种,一种是通过命令行方式启动,官网有详细的启动说明(CoreNLP Server),操作方法是打开命令行(windows下的命令提示符或linux/Mac下的Terminal),输入以下命令即可(具体使用说明请参看官方文档)。用该命令启动Server后,可通过上文提到的指定url参数的方式调用本地的api。

    java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000

    对于入门用户,推荐使用第二种启动方式,即利用我提供的pip包在python中直接启动Server并对语料进行处理,示例的python代码如下。其中,annotators参数指定的是启动Server时要加载什么标注器,常用的有:tokenize(分词),ssplit(分句),pos(词性标注),ner(命名实体识别),parse(成分句法分析),deparse(依存句法分析)。这里加载的是分词、分句。不同的标注器用逗号隔开。不同语言支持的标注器可参看(Using CoreNLP on other human languages)。

    from corenlp_client import CoreNLP

    corenlp_dir = "/path/to/corenlp" # 这里填写CoreNLP压缩包解压后的路径

    with CoreNLP(annotators="tokenize,ssplit,pos", corenlp_dir=corenlp_dir, lang="zh") as annotator:

    print(annotator.tokenize("今天天气不错!我想去故宫博物院。")) # 在with语句下缩进代码

    如果发现内存或CPU占用过多,可通过关键字参数限制:

    # max_mem: 内存占用限制, 默认为4G;threads: 最大线程数, 默认为cpu核心数。

    with CoreNLP(annotators="tokenize", corenlp_dir="/path/to/corenlp", local_port=9000, max_mem=4, threads=2) as annotator:

    # your code here

    进阶使用

    以上介绍了使用corenlp_client进行分词、分句、词性标注、命名实体识别及如何本地启动CoreNLP Server。对于进阶用户,corenlp_client还提供了更多的功能,以便用户进一步处理:

    # 此处省略导入包及创建annotator对象的代码

    anno = annotator.annotate("CoreNLP is your one stop shop for natural language processing in Java! Enjoy yourself! ")

    print(anno.tokens) # tokens,包含分词、词性标注、token级别的ner结果

    print(anno.parse_tree) # 成分句法分析

    print(anno.bi_parse_tree) # 二叉化的成分句法分析

    print(anno.basic_dep) # basic依存句法分析

    print(anno.enhanced_dep) # enhanced依存句法分析

    print(anno.enhanced_pp_dep) # enhanced++依存句法分析

    print(anno.entities) # entitymentions

    print(anno.openie) # openie

    print(anno.ann_result) # CoreNLP Server的原始返回结果

    print(annotator.pretty_print_tree(anno.parse_tree[0])) # 将成分句法分析的结果打印为树结构

    本项目的github地址为:Jason3900/corenlp_client​github.com

    欢迎大家提供使用反馈及意见,当然也欢迎手动Star以支持本项目维护~谢谢!

    展开全文
  • 8.6.1.通过 elasticsearch-plugin 命令安装分词插件 root@netkiller ~ % /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/re...
  • 参考链接:https://blog.csdn.net/alihonglong/article/details/52333471进行统计自然语言处理系统梳理,...中文(还有日语、越南语、藏语等)的文本不像西方屈折语的文本,词与词之间没有空格之类的标注来显示指示...
  • JVnSegmenter是基于Java的开源越南分词工具。 使用条件随机场(FlexCRF)对分割模型进行了约8,000个句子的训练。 该工具对越南NLP社区很有用。
  • 日本九州大学等研究利用淤泥和稻草等产生的沼气制造电力的燃料电池小组,在越南实证实验的大楼里,发表了其发电效率已达到世界先端水平。比燃烧煤气发电效率高2 ~ 3倍。今后以实用化为目标,推进和提高耐久性及成本...
  • 这一研究代表了磁振荡的极高稳定程度,而高稳定性磁振荡意味着可以构建模拟生物神经元,快速处理实时大数据,最终制造出更节能的微型芯片。 第二,在欧盟倡导发展机器人的大环境下,加上法国本身工程能力...
  • ANSI 编码格式与 UTF-8 不兼容,格式转换后任会出现空格行检测和去除不掉问题。 解决方案(定位,手动清除): with open(r"D:\pythonProject\xxxxx-pytorch-master\data\char_dict.txt", 'rb') as file: ...
  • SVM原理简介:最大间隔分类SVM是一种二类分类模型,其求解目标在于确定一个分类的超平面,以最大化特征空间上的间隔。分类超平面的确定只取决于少数的样本信息,这些关键的样本被称之为支持向量Support Vector,这...
  • 敏感词过滤/字符编码

    千次阅读 2019-06-12 15:36:22
    字符编码检测的优势在于它是否关注统计分析或HTML元和XML Prolog发现。如果您正在处理具有meta的HTML文件,请使用cpdetector。否则,您最好的选择是monq.stuff.encodingdetector或...
  • 敏感词过滤

    千次阅读 2019-05-08 14:20:07
    字符编码检测的优势在于它是否关注统计分析或HTML元和XML Prolog发现。如果您正在处理具有meta的HTML文件,请使用cpdetector。否则,您最好的选择是monq.stuff.encodingdetector或...
  • 网络视频中的谣言检测 基于知识推理的目标检测方法 基于知识库的视觉问答技术研究 利用深度学习的智能手机步态识别 深度自编码在大规模稀疏数据中的应用研究 大规模图像标注与检索系统的设计与实现 机器翻译的错误...
  • ToolsOh第4批收录

    2022-05-02 15:17:33
    https://www.toolsoh.com/p/f/td/pingmuchicundaquan-completecollectionofscr-1.html 越南语文字识别 https://www.toolsoh.com/p/f/td/yuenanyuwenzishibie-vietnamesecharacterrec-1.html 塔加洛语文字识别 ...
  • 越南语 el 现代希腊语 kn 卡纳达语 ps 普什图语 vo 沃拉普克语 en 英语 ko 朝鲜语 、 韩语 pt 葡萄牙语 wa 沃伦语 eo ...
  • 文章目录 一、分词词性标注 二、关键字提取 三、自动摘要 四、依存句法分析 五、短语提取 六、同义改写 七、文本推荐 一、分词词性标注 segment 可以进行中文分词、词性标注与命名实体识别 from pyhanlp import * ...
  • 计算机专业毕业设计题目汇总-最新题目-选题-推荐-毕业设计 - 毕设指导-开题报告-论文
  • 事件提取应该通过检测句子中的触发词“Attract”并将其分类为“Conflict/Attract”事件,接下来,应该从文本中提取与该事件相关的论元,并根据预定义的事件结构标识它们各自的角色。 上图给出了结构化事件的闭域...
  • 实现了基于CRF suite的分词系统,并利用最佳语料库对模型进行训练。我们预先训练每种语言的分类模型。由于批处理规模相对于训练数据规模较小,发现训练2个epoch就足够了。VI、TH和ID在开发集上F1得分分别为90.08%、...
  • Step 1: 源语言语句的理解 包括词语、短语、句子和语篇(对话)等多层次语言单位的处理 词语层面:如何界定和切分适合机器翻译的基本语言单元(如汉语、日语、越南语、泰国语等语言的分词问题)、多义词的歧义消解...

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

越南分词器

友情链接: FPDE code.zip