CoreNLP_corenlp - CSDN
精华内容
参与话题
  • coreNLP的使用

    千次阅读 2018-01-05 17:32:22
    最近考虑做些英文词语词干化的工作,听说coreNLP这个工具不错,就拿来用了。 coreNLP是斯坦福大学开发的一套关于自然语言处理的工具(toolbox),使用简单功能强大,有;命名实体识别、词性标注、词语词干化、语句...

    最近考虑做些英文词语词干化的工作,听说coreNLP这个工具不错,就拿来用了。

    coreNLP是斯坦福大学开发的一套关于自然语言处理的工具(toolbox),使用简单功能强大,有;命名实体识别、词性标注、词语词干化、语句语法树的构造还有指代关系等功能,使用起来比较方便。

    coreNLP是使用Java编写的,运行环境需要在JDK1.8,1.7貌似都不支持。这是需要注意的

     

    coreNLP官方文档不多,但是给的几个示例文件也差不多能摸索出来怎么用,刚才摸索了一下,觉得还挺顺手的。

     

    环境:

    window7 64位

    JDK1.8

     

    需要引进的ar包:



    说明:这里只是测试了英文的,所以使用的Stanford-corenlp-3.6.0.models.jar文件,如果使用中文的需要在官网上下对应中文的model jar包,然后引进项目即可。

     

    直接看代码比较简单:

    [java] view plain copy
    1. package com.luchi.corenlp;  
    2.   
    3. import java.util.List;  
    4. import java.util.Map;  
    5. import java.util.Properties;  
    6.   
    7. import edu.stanford.nlp.hcoref.CorefCoreAnnotations.CorefChainAnnotation;  
    8. import edu.stanford.nlp.hcoref.data.CorefChain;  
    9. import edu.stanford.nlp.ling.CoreAnnotations;  
    10. import edu.stanford.nlp.ling.CoreAnnotations.LemmaAnnotation;  
    11. import edu.stanford.nlp.ling.CoreAnnotations.NamedEntityTagAnnotation;  
    12. import edu.stanford.nlp.ling.CoreAnnotations.PartOfSpeechAnnotation;  
    13. import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation;  
    14. import edu.stanford.nlp.ling.CoreAnnotations.TextAnnotation;  
    15. import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation;  
    16. import edu.stanford.nlp.ling.CoreLabel;  
    17. import edu.stanford.nlp.pipeline.Annotation;  
    18. import edu.stanford.nlp.pipeline.StanfordCoreNLP;  
    19. import edu.stanford.nlp.semgraph.SemanticGraph;  
    20. import edu.stanford.nlp.semgraph.SemanticGraphCoreAnnotations;  
    21. import edu.stanford.nlp.trees.Tree;  
    22. import edu.stanford.nlp.trees.TreeCoreAnnotations.TreeAnnotation;  
    23. import edu.stanford.nlp.util.CoreMap;  
    24.   
    25. public class TestNLP {  
    26.       
    27.     public void test(){  
    28.         //构造一个StanfordCoreNLP对象,配置NLP的功能,如lemma是词干化,ner是命名实体识别等  
    29.         Properties props = new Properties();  
    30.         props.setProperty("annotators""tokenize, ssplit, pos, lemma, ner, parse, dcoref");  
    31.         StanfordCoreNLP pipeline = new StanfordCoreNLP(props);  
    32.   
    33.         // 待处理字符串  
    34.         String text = "judy has been to china . she likes people there . and she went to Beijing ";// Add your text here!  
    35.   
    36.         // 创造一个空的Annotation对象  
    37.         Annotation document = new Annotation(text);  
    38.   
    39.         // 对文本进行分析  
    40.         pipeline.annotate(document);  
    41.           
    42.         //获取文本处理结果  
    43.         List<CoreMap> sentences = document.get(SentencesAnnotation.class);  
    44.         for(CoreMap sentence: sentences) {  
    45.               // traversing the words in the current sentence  
    46.               // a CoreLabel is a CoreMap with additional token-specific methods  
    47.               for (CoreLabel token: sentence.get(TokensAnnotation.class)) {  
    48.                 // 获取句子的token(可以是作为分词后的词语)  
    49.                 String word = token.get(TextAnnotation.class);  
    50.                 System.out.println(word);  
    51.                 //词性标注  
    52.                 String pos = token.get(PartOfSpeechAnnotation.class);  
    53.                 System.out.println(pos);  
    54.                 // 命名实体识别  
    55.                 String ne = token.get(NamedEntityTagAnnotation.class);  
    56.                 System.out.println(ne);  
    57.                 //词干化处理  
    58.                 String lema=token.get(LemmaAnnotation.class);  
    59.                 System.out.println(lema);  
    60.               }  
    61.   
    62.               // 句子的解析树  
    63.               Tree tree = sentence.get(TreeAnnotation.class);  
    64.               tree.pennPrint();  
    65.   
    66.              // 句子的依赖图  
    67.               SemanticGraph graph = sentence.get(SemanticGraphCoreAnnotations.CollapsedCCProcessedDependenciesAnnotation.class);  
    68.               System.out.println(graph.toString(SemanticGraph.OutputFormat.LIST));  
    69.                 
    70.                 
    71.             }  
    72.   
    73.             // 指代词链  
    74.             //每条链保存指代的集合  
    75.             // 句子和偏移量都从1开始  
    76.             Map<Integer, CorefChain> corefChains =  document.get(CorefChainAnnotation.class);  
    77.             if (corefChains == null) { return; }  
    78.               for (Map.Entry<Integer,CorefChain> entry: corefChains.entrySet()) {  
    79.                 System.out.println("Chain " + entry.getKey() + " ");  
    80.                 for (CorefChain.CorefMention m : entry.getValue().getMentionsInTextualOrder()) {  
    81.                   // We need to subtract one since the indices count from 1 but the Lists start from 0  
    82.                   List<CoreLabel> tokens = sentences.get(m.sentNum - 1).get(CoreAnnotations.TokensAnnotation.class);  
    83.                   // We subtract two for end: one for 0-based indexing, and one because we want last token of mention not one following.  
    84.                   System. out.println("  " + m + ", i.e., 0-based character offsets [" + tokens.get(m.startIndex - 1).beginPosition() +  
    85.                           ", " + tokens.get(m.endIndex - 2).endPosition() + ")");  
    86.                 }  
    87.               }  
    88.     }  
    89.     public static void main(String[]args){  
    90.         TestNLP nlp=new TestNLP();  
    91.         nlp.test();  
    92.     }  
    93.   
    94. }  

     具体的注释都给出来了,我们可以直接看结果就知道代码的作用了:

    对于每个token的识别结果:





      

    原句中的:

            judy 识别结果为:词性为NN,也就是名词,命名实体对象识别结果为O,词干识别为Judy

            注意到has识别的词干已经被识别出来了,是“have”

            而Beijing的命名实体标注识别结果为“Location”,也就意味着识别出了地名

     

    然后我们看 解析树的识别(以第一句为例):



     

    最后我们看一下指代的识别:



    每个chain包含的是指代相同内容的词语,如chain1中两个she虽然在句子的不同位置,但是都指代的是第一句的“Judy”,这和原文的意思一致,表示识别正确,offsets表示的是该词语在句子中的位置

     

     当然我只是用到了coreNLP的词干化功能,所以只需要把上面代码一改就可以处理词干化了,测试代码如下:

    [java] view plain copy
    1. package com.luchi.corenlp;  
    2.   
    3. import java.util.List;  
    4. import java.util.Properties;  
    5.   
    6. import edu.stanford.nlp.ling.CoreLabel;  
    7. import edu.stanford.nlp.ling.CoreAnnotations.LemmaAnnotation;  
    8. import edu.stanford.nlp.ling.CoreAnnotations.SentencesAnnotation;  
    9. import edu.stanford.nlp.ling.CoreAnnotations.TokensAnnotation;  
    10. import edu.stanford.nlp.pipeline.Annotation;  
    11. import edu.stanford.nlp.pipeline.StanfordCoreNLP;  
    12.   
    13. import edu.stanford.nlp.util.CoreMap;  
    14.   
    15. public class Lemma {  
    16.   
    17.     // 词干化  
    18.     public String stemmed(String inputStr) {  
    19.         Properties props = new Properties();  
    20.         props.setProperty("annotators""tokenize, ssplit, pos, lemma, ner, parse, dcoref");  
    21.         StanfordCoreNLP pipeline = new StanfordCoreNLP(props);  
    22.   
    23.         Annotation document = new Annotation(inputStr);  
    24.         pipeline.annotate(document);  
    25.         List<CoreMap> sentences = document.get(SentencesAnnotation.class);  
    26.   
    27.         String outputStr = "";  
    28.         for (CoreMap sentence : sentences) {  
    29.             // traversing the words in the current sentence  
    30.             // a CoreLabel is a CoreMap with additional token-specific methods  
    31.             for (CoreLabel token : sentence.get(TokensAnnotation.class)) {  
    32.                 String lema = token.get(LemmaAnnotation.class);  
    33.                 outputStr += lema+" ";  
    34.             }  
    35.   
    36.         }  
    37.         return outputStr;  
    38.     }  
    39.     public static void main(String[]args){  
    40.           
    41.         Lemma lemma=new Lemma();  
    42.         String input="jack had been to china there months ago. he likes china very much,and he is falling love with this country";  
    43.         String output=lemma.stemmed(input);  
    44.         System.out.print("原句    :");  
    45.         System.out.println(input);  
    46.         System.out.print("词干化:");  
    47.         System.out.println(output);  
    48.                   
    49.           
    50.     }  
    51.   
    52. }  

     输出结果为:

     

     结果还是很准确的

    展开全文
  • 使用Stanford CoreNLP工具包处理中文

    千次阅读 2018-06-11 21:38:52
    转载:https://blog.csdn.net/u014749291/article/details/51152007这几天刚刚接触自然语言处理,使用了...其中用Stanford CoreNLP集合工具来处理中文的方法网上很少有说明,官方Demo也没有说明,特在此记下。Stanfo...

    转载:https://blog.csdn.net/u014749291/article/details/51152007

    这几天刚刚接触自然语言处理,使用了Stanford CoreNLP工具。但毕竟是第一次用,所以遇到很多问题,现将解决方案记下(容易百度到的错误就不记了)。

    其中用Stanford CoreNLP集合工具来处理中文的方法网上很少有说明,官方Demo也没有说明,特在此记下。

    Stanford 提供了很多NLP工具,默认均直接支持英文,部分需要model支持中文。这是这些工具官方列表地址:http://nlp.stanford.edu/software/

    部分工具列表如图:


    其中第一个Stanford CoreNLP工具可以说是其它工具的集合,功能相对强大。假如你只需要进行分词,则使用Stanford Word Segmenter工具即可。该工具支持中文。而且下载的文件中也有适用于中文的Demo,比较容易理解。但是如果你想使用集合工具Stanford CoreNLP处理中文,则网上相关资料很少,下载的Demo文件中只有处理英文的。

    下面介绍怎么用集合工具Stanford CoreNLP处理中文

    注意:需要java8,怎么配合eclipse使用,自己百度,目前需要安装一个更新。

    1、你需要下载Stanford CoreNLP,我下载的是3.6.0:http://stanfordnlp.github.io/CoreNLP/index.html#download

    2、你需要下载中文支持包:stanford-chinese-corenlp-models.jar,我下载的也是3.6.0:http://stanfordnlp.github.io/CoreNLP/index.html#download

    3、下载完毕后,Stanford CoreNLP需要解压,然后将stanford-chinese-corenlp-models.jar放到解压文件夹里,将文件夹中的所有.jar加入你建立的工程中。


    然后测试代码与英文的Demo不同,代码很简单

    public class test_demo {
        public static void main(String[] args) {
        String props="StanfordCoreNLP-chinese.properties";
        StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
        Annotation annotation;
        //if  data from file
        //annotation = new Annotation(IOUtils.slurpFileNoExceptions(file));
         annotation = new Annotation("这家酒店很好,我很喜欢。");


        pipeline.annotate(annotation);
        pipeline.prettyPrint(annotation, System.out);
    }
    }

    主要就是标红的代码。这个是stanford-chinese-corenlp-models.jar中的一个文件,可以用解压软件打开查看一下,里边默认定义了使用哪些工具,以及相应的设置,可以自己根据需要修改,箭头指示的为默认支持的工具,分词、分句、词性标注、命名实体识别、语法分析等等,下边是每个工具对应的参数设置,这样就可以用这一强大工具来处理中文了。


    结果截图:






    展开全文
  • Stanford CoreNLP 介绍

    千次阅读 2017-08-25 14:43:08
    Overview介绍 Stanford CoreNLP是用处理自然语言的工具集合。它可以给出词语的基本形式:词性(它们是公司名、人名等,规范化得日期,时间,和数字),根据短语和语法依赖来标记句子的结构,发现实体之间的关系、...

    Overview

    介绍

        Stanford CoreNLP是用处理自然语言的工具集合。它可以给出词语的基本形式:词性(它们是公司名、人名等,规范化得日期,时间,和数字),根据短语和语法依赖来标记句子的结构,发现实体之间的关系、情感以及人们所说的话等。
    你选择选择Stanford CoreNLP的理由:
        1、它是一个众多语法分析工具集成的工具包。
        2、对任意的文本来说它具有快和鲁棒性强的特点,并且还广泛的用于生产中。
        3、它还具有时用性,及时性。
        4、支持数量众多的(主要)自然语言。
        5、支持编程语言的接口丰富。
        6、能够作为简单的web服务运行。
    
        Stanford CoreNLP的目的是为了让一系列语言分析工具应用到一段文本上变得更容易。用两行代码就可以让一段原生的文本在一个工具管道(一系列处理文本的操作)中流过。CoreNLP 具有很强的灵活性和扩展性。通过一个选项的设置你就可以选择那些语言处理的工具可以应用到这段文本。
    
        Stanford CoreNLP包含许多的斯坦福的nlp工具,包括:词性标注器、命名实体的识别器、解析器(句子与语法结构)、指代消解器(就是在篇章中确定代词指向哪个名词短语的问题)、情感分析器、   引导模式学习器、开放信息提取器。 而且,一个解释管道还可以包含其他自定义或者第三方的解释器
    

    这里写图片描述

    相关引用

    展开全文
  • 更多实时更新的个人学习笔记分享,请关注: ...微信订阅号:人工智能小白入门学习 ...Stanford CoreNLP提供了一套人类语言技术工具。 支持多种自然语言处理基本功能,Stanfordcorenlp是它的一个python接口。...

    Stanfordcorenlp简介

    • Stanford CoreNLP提供了一套人类语言技术工具。 支持多种自然语言处理基本功能,Stanfordcorenlp是它的一个python接口。
    • 官网地址:https://stanfordnlp.github.io/CoreNLP/
      Github地址:https://github.com/stanfordnlp/CoreNLP
    • Stanfordcorenlp主要功能包括分词、词性标注、命名实体识别、句法结构分析和依存分析等等。

    Stanfordcorenlp工具Demo

    安装:pip install stanfordcorenlp

    先下载模型,下载地址:https://nlp.stanford.edu/software/corenlp-backup-download.html

    支持多种语言,这里记录一下中英文使用方法

    from stanfordcorenlp import StanfordCoreNLP
    zh_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27', lang='zh')
    en_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27', lang='en')
    
    zh_sentence = '我爱自然语言处理技术!'
    en_sentence = 'I love natural language processing technology!'
    

    1.分词(Tokenize)

    print ('Tokenize:', zh_model.word_tokenize(zh_sentence))
    print ('Tokenize:', en_model.word_tokenize(en_sentence))
    
    Tokenize: ['我爱', '自然', '语言', '处理', '技术', '!']
    Tokenize: ['I', 'love', 'natural', 'language', 'processing', 'technology', '!']
    

    2.词性标注(Part of Speech)

    print ('Part of Speech:', zh_model.pos_tag(zh_sentence))
    print ('Part of Speech:', en_model.pos_tag(en_sentence))
    
    Part of Speech: [('我爱', 'NN'), ('自然', 'AD'), ('语言', 'NN'), ('处理', 'VV'), ('技术', 'NN'), ('!', 'PU')]
    Part of Speech: [('I', 'PRP'), ('love', 'VBP'), ('natural', 'JJ'), ('language', 'NN'), ('processing', 'NN'), ('technology', 'NN'), ('!', '.')]
    

    3.命名实体识别(Named Entity)

    print ('Named Entities:', zh_model.ner(zh_sentence))
    print ('Named Entities:', en_model.ner(en_sentence))
    
    Named Entities: [('我爱', 'O'), ('自然', 'O'), ('语言', 'O'), ('处理', 'O'), ('技术', 'O'), ('!', 'O')]
    Named Entities: [('I', 'O'), ('love', 'O'), ('natural', 'O'), ('language', 'O'), ('processing', 'O'), ('technology', 'O'), ('!', 'O')]
    

    4.句法成分分析(Constituency Parse)

    print ('Constituency Parsing:', zh_model.parse(zh_sentence) + "\n")
    print ('Constituency Parsing:', en_model.parse(en_sentence))
    
    Constituency Parsing: (ROOT
      (IP
        (IP
          (NP (NN 我爱))
          (ADVP (AD 自然))
          (NP (NN 语言))
          (VP (VV 处理)
            (NP (NN 技术))))
        (PU !)))
    
    Constituency Parsing: (ROOT
      (S
        (NP (PRP I))
        (VP (VBP love)
          (NP (JJ natural) (NN language) (NN processing) (NN technology)))
        (. !)))
    

    5.依存句法分析(Dependency Parse)

    print ('Dependency:', zh_model.dependency_parse(zh_sentence))
    print ('Dependency:', en_model.dependency_parse(en_sentence))
    
    Dependency: [('ROOT', 0, 4), ('nsubj', 4, 1), ('advmod', 4, 2), ('nsubj', 4, 3), ('dobj', 4, 5), ('punct', 4, 6)]
    Dependency: [('ROOT', 0, 2), ('nsubj', 2, 1), ('amod', 6, 3), ('compound', 6, 4), ('compound', 6, 5), ('dobj', 2, 6), ('punct', 2, 7)]
    

    欢迎关注【AI小白入门】,这里分享Python、机器学习、深度学习、自然语言处理、人工智能等技术,关注前沿技术,求职经验等,陪有梦想的你一起成长。
    在这里插入图片描述

    展开全文
  • standfordcorenlp

    2019-06-03 18:05:50
    standfordcorenlp在python环境下的使用(中文分词、词性标注、命名实体分析、解析语法、解析语法关系) 操作环境:windows 需求:安装PyCharm、JDK1.8 第一步: 首先从stanford NLP网页下载两个包,分别是stanford-...
  • Stanford CoreNLP的源代码是使用Java写的,提供了Server方式进行交互。stanfordcorenlp是一个对Stanford CoreNLP进行了封装的Python工具包,GitHub地址,使用非常方便。本文以stanfordcorenlp接口为例(本文所用版本...
  • 两种在Python中使用Stanford CoreNLP的方法

    万次阅读 热门讨论 2018-08-22 11:20:37
    这两种方法都需要提前下载CoreNLP最新的压缩包,再下载对应的语言jar包。从CoreNLP下载页面下载。将压缩包解压得到目录,再将语言的jar包放到这个目录下即可。并且要求java -version&gt;=1.8。 接下来就是利用...
  • Stanford CoreNLP的源代码是使用Java写的,提供了Server方式进行交互。stanfordcorenlp是一个对Stanford CoreNLP进行了封装的Python工具包,GitHub地址,使用非常方便。 安装stanfordcorenlp包之前: 1:下载安装...
  • CoreNLP Python接口处理中文

    万次阅读 2017-08-02 19:03:24
    CoreNLP 项目是Stanford开发的一套开源的NLP系统。包括tokenize, pos , parse 等功能,与SpaCy类似。SpaCy号称是目前最快的NLP系统, 并且提供现成的python接口,但不足之处就是目前还不支持中文处理, CoreNLP则...
  • 在stanford coreNLP的网页中直接以树的形式可视化了解析结果。但在IDE中,利用python调用coreNLP server后返回的是字符串格式。这是可以利用nltk中的Tree类来可视化解析结果。代码如下: from nltk.tree import ...
  • 抱歉,不能做! 下图是corenlp的annotator中不同语言对其功能的支持情况 我也是看了很久官网的文档,最后才发现这个残酷的事实的。
  • Stanford CoreNLP 3.6.0 使用入门

    万次阅读 2020-10-01 17:03:06
    Stanford CoreNLP由Java语言开发,是斯坦福大学自然语言处理小组的研究成果。 包含自然语言处理的基本任务:分词、词性标注、依存句法分析、命名实体识别等等,支持多语言。项目地址:GitHub本文主要记录使用注意...
  • Stanford CoreNLP 进行中文分词

    万次阅读 2017-06-11 10:01:18
    Stanford CoreNLP 进行中文分词中文分词的工具有很多,使用斯坦福的CoreNLP进行分词的教程网上也不少,本篇博客是记录自己在使用Stanford CoreNLP进行中文分词的学习笔记。1. 工具准备1.1 下载NLP相关包:网址: ...
  • standford nlp 教程

    千次阅读 2020-04-24 12:42:20
    githubhttps://github.com/stanfordnlp/CoreNLP 官网:http://stanfordnlp.github.io/CoreNLP/simple.html 功能: SummaryAnnotator dependenciesTokenizationSentence SplittingLemmatizationParts of Spee
  • 在python中使用stanford CoreNLP coreference

    千次阅读 2018-05-01 10:15:28
    在python中使用stanford CoreNLP coreference有三种方法1. 使用命令调用的方式如下:(奇怪的是我的没有任何输出,先挖个坑,等找到原因再来补充)import subprocess subprocess.call(['java','-cp','F:/Program ...
  • 如何用Stanford coreNLP 做中英文指代分解 指代分解是NLP领域的一个重要课题,目前流行好用的的NLP很多,如NLTK,spaCy,polyglot,jieba等,但实现指代消解的NLP着实的少,目前可以找到的貌似只有spacy下的...
  • 本文旨在学习使用Stanford CoreNLP进行自然语言处理。 编程环境:64位win7系统,NetBeans,java要求1.8+ CoreNLP版本:3.6.0,下载地址:http://stanfordnlp.github.io/CoreNLP/,获取stanford-corenlp-full-...
  • Ubuntu下安装Stanford CoreNLP

    千次阅读 2018-09-02 10:44:44
    Stanford CoreNLP提供了一系列自然语言分析工具。它能够给出基本的词形,词性,不管是公司名还是人名等,格式化的日期,时间,量词,并且能够标记句子的结构,语法形式和字词依赖,指明那些名字指向同样的实体,指明...
  • Linux安装Stanford-CoreNLP

    2019-04-22 19:31:25
    一、首先需要安装java8 brew cask install ...二、下载Stanford coreNLP 包 1、下载https://stanfordnlp.github.io/CoreNLP/的CoreNLP 3.9.2以及模型jar包,包括英文和中文模型jar包。 或如下地址: Stanf...
  • CoreNLP 项目是Stanford开发的一套开源的NLP系统。包括tokenize, pos , parse 等功能,与SpaCy类似。SpaCy号称是目前最快的NLP系统, 并且提供现成的python接口,但不足之处就是目前还不支持中文处理, CoreNLP则...
1 2 3 4 5 ... 20
收藏数 2,090
精华内容 836
关键字:

CoreNLP