hanlp_hanlp分词原理 - CSDN
精华内容
参与话题
  • hanlp安装和使用

    千次阅读 2018-10-24 14:54:44
    下载HanLP-1.3.4.zip 下载hanlp-1.3.4-release 下载hanlp.properties 在https://github.com/hankcs/HanLP/releases中下载data然后覆盖HanLP-1.3.4.zip解压后的data 包括中文分词,句法分析和命名实体识别。 ...

    下载HanLP-1.3.4.zip
    下载hanlp-1.3.4-release
    下载hanlp.properties
    在https://github.com/hankcs/HanLP/releases中下载data然后覆盖HanLP-1.3.4.zip解压后的data

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    包括中文分词,句法分析和命名实体识别。

    文章来源于勿在浮沙筑高台LS的博客

    展开全文
  • HanLP汉语言分析框架

    千次阅读 2018-11-05 14:07:02
    HanLP(Han Language Processing)是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。 HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。 环境搭建 1.创建java...

    HanLP(Han Language Processing)是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。

    HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。

    环境搭建

    1.创建java项目,导入HanLP必要的包
    在这里插入图片描述

    2.把对应的配置文件放置在src下

    在这里插入图片描述

    3.修改hanlp.properties配置文件,使其指向data(data中包含词典和模型)的上级路径,修改如下,
    在这里插入图片描述

    代码运行

    1.第一个Demo

    System.out.println(HanLP.segment(“你好,欢迎使用HanLP汉语处理包!”));
    //标准分词
    List standardList = StandardTokenizer.segment(“商品和服务”);
    System.out.println(standardList);
    结果:
    在这里插入图片描述

    注意:HanLP.segment其实是对StandardTokenizer.segment的包装。

    2.索引分词

    List indexList = IndexTokenizer.segment(“主副食品”);
    for (Term term : indexList)
    {
    System.out.println(term + " [" + term.offset + “:” + (term.offset + term.word.length()) + “]”);
    }
    结果:

    在这里插入图片描述

    注意:索引分词IndexTokenizer是面向搜索引擎的分词器,能够对长词全切分,另外通过term.offset可以获取单词在文本中的偏移量。

    3.自然语言分词

    List nlpList = NLPTokenizer.segment(“中国科学院计算技术研究所的宗成庆教授正在教授自然语言处理课程”);
    System.out.println(nlpList);
    结果:

    在这里插入图片描述

    注意:自然语言分词NLPTokenizer会执行全部命名实体识别和词性标注。

    4.最短路径分词&N-最短路径分词

    String[] testCase = new String[]{
    “今天,刘志军案的关键人物,山西女商人丁书苗在市二中院出庭受审。”,
    “刘喜杰石国祥会见吴亚琴先进事迹报告团成员”,
    };
    //N-最短路径分词
    Segment nShortSegment = new NShortSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true);
    for (String sentence : testCase)
    {
    System.out.println(“N-最短分词:” + nShortSegment.seg(sentence));
    }
    //最短路径分词
    Segment shortestSegment = new DijkstraSegment().enableCustomDictionary(false).enablePlaceRecognize(true).enableOrganizationRecognize(true);
    for (String sentence : testCase)
    {
    System.out.println(“最短路分词:” + shortestSegment.seg(sentence));
    }
    结果:

    在这里插入图片描述

    注意:

    N最短路分词器NShortSegment比最短路分词器慢,但是效果稍微好一些,对命名实体识别能力更强。

    一般场景下最短路分词的精度已经足够,而且速度比N最短路分词器快几倍,请酌情选择。

    5.CRF(条件随机场算法)分词

    Segment segment = new CRFSegment();
    segment.enablePartOfSpeechTagging(true);
    List crfList = segment.seg(“你看过环太平洋吗”);
    System.out.println(crfList);
    for (Term term : crfList)
    {
    if (term.nature == null)
    {
    System.out.println(“识别到新词:” + term.word);
    }
    }
    结果:

    在这里插入图片描述

    注意:CRF对新词有很好的识别能力,但是无法利用自定义词典。

    6.用户自定义词典

    // 动态增加
    CustomDictionary.add(“攻城狮”);
    // 强行插入
    CustomDictionary.insert(“白富美”, “nz 1024”);
    // 删除词语(注释掉试试)
    //CustomDictionary.remove(“攻城狮”);
    System.out.println(CustomDictionary.add(“单身狗”, “nz 1024 n 1”));
    System.out.println("单身狗 : " + CustomDictionary.get(“单身狗”));
    String text2 = “攻城狮逆袭单身狗,迎娶白富美,走上人生巅峰”;
    String text23 = “王重阳和步惊云一起讨论盖聂的百步飞剑的诀窍! “;
    // AhoCorasickDoubleArrayTrie自动机分词
    final char[] charArray = text23.toCharArray();
    CustomDictionary.parseText(charArray, new AhoCorasickDoubleArrayTrie.IHit<CoreDictionary.Attribute>()
    {
    @Override
    public void hit(int begin, int end, CoreDictionary.Attribute value)
    {
    System.out.printf(”[%d:%d]=%s %s\n”, begin, end, new String(charArray, begin, end - begin), value);
    }
    });

    结果:

    在这里插入图片描述

    注意:

    CustomDictionary是一份全局的用户自定义词典,可以随时增删,影响全部分词器。

    另外可以在任何分词器中关闭它。通过代码动态增删不会保存到词典文件。

    7.中国人名识别

    String[] testCase2 = new String[]{
    “签约仪式前,秦光荣、李纪恒、仇和等一同会见了参加签约的企业家。”,
    “张浩和胡健康复员回家了”,
    “编剧邵钧林和稽道青说”,
    “这里有关天培的有关事迹”,
    “龚学平等领导,邓颖超生前”,
    };
    Segment segment2 = HanLP.newSegment().enableNameRecognize(true);
    for (String sentence : testCase2)
    {
    List termList = segment2.seg(sentence);
    System.out.println(termList);
    }
    结果:

    在这里插入图片描述

    注意:目前分词器基本上都默认开启了中国人名识别,比如HanLP.segment()接口中使用的分词器等等,用户不必手动开启;

    8.关键字提取

    String content = “程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。”;
    List keywordList = HanLP.extractKeyword(content, 5);
    System.out.println(keywordList);
    结果:

    在这里插入图片描述

    注意:其内部采用TextRankKeyword(类谷歌的PageRank)实现,用户可以直接调用TextRankKeyword.getKeywordList(document, size)。

    9.简繁转换

    System.out.println(HanLP.convertToTraditionalChinese(“用笔记本电脑写程序”));
    System.out.println(HanLP.convertToSimplifiedChinese("「以後等妳當上皇后,就能買士多啤梨慶祝了」"));
    结果:

    在这里插入图片描述

    10.语义距离

    String[] wordArray2 = new String[]
    {
    “香蕉”,“苹果”,“白菜”,“水果”,“蔬菜”
    };
    for (String a : wordArray2){
      for (String b : wordArray2)
      {
        System.out.println(a + “\t” + b + “\t之间的距离是\t” + CoreSynonymDictionary.distance(a, b));
      }
    }

    结果:

    在这里插入图片描述

    注意:

    说明

    设想的应用场景是搜索引擎对词义的理解,词与词并不只存在“同义词”与“非同义词”的关系,就算是同义词,它们之间的意义也是有微妙的差别的。

    算法

    为每个词分配一个语义ID,词与词的距离通过语义ID的差得到。语义ID通过《同义词词林扩展版》计算而来。

    文章来源于网络

    展开全文
  • 在之前的实验中得到了不在词向量里的词与分词结果,结果有500多个词不在词向量里,解决方案就是重新分词,或再追加训练这些词到词向量里。但后者相对麻烦且目前样本量不大。我跟据词向量的作者[6]所使用的分词工具来...

    在之前的实验中得到了不在词向量里的词与分词结果,结果有500多个词不在词向量里,解决方案就是重新分词,或再追加训练这些词到词向量里。但后者相对麻烦且目前样本量不大。我跟据词向量的作者[6]所使用的分词工具来分词,会比不同工具(jieba)的效果要好,因为都是同一模式的分词,分出来的词应该都会存在于大型语料库中。实验证明思路是对的,最后结果是只有60几个词不在词向量里,其中大部分为名词,还有些为因语音翻译问题所造成的出错连词,所有这些词也只出现一次,这部分可以考虑最后删去也不会影响结果。改善未出现词是个关键步骤,因为此后模型会用到词向量,如果未出现词过多,会影响词向量效果。

    问题:不过最后HANLP分词影响了实验判断结果,准确率从93%(jieba分词,同模型同参数)下降到90%。

    实验:使用HanLP分词[1][2]

    1,前期准备,(环境ubuntu,python3)安装JAVA-10[3](hanlp是JAVA开发的,即使使用python调用pyhanlp需要借助java), jpype(python中虚拟java环境),hanlp(开源中文处理工具,不只是分词还有各种工具),hanlp的root路径配置及data数据包放置[4]

    2,主要程序[5]

    使用的是HANLP的普通分词功能,另外需注意,hanlp.segment()不能直接输出或赋值给python,因为其是java环境中数据,所以只有转为str()后,再进行处理,否则会报错#A fatal error。(另外还有其他java与python数据对应问题,在这里没遇到,请参考其他)

    词向量选用的是“Mixed-large综合”[6],其包括百度wiki百科、人民日报等,总共1293214个词。

    Hanlp的中部份功能没法使用,例如精确分词CRF。另外,要先加载词向量再加载java虚拟环境。#A fatal error has been detected by the Java Runtime Environment

    3,实验结果
    在这里插入图片描述

    (模型使用的是特征为tfidf的lsi模型, 参数:num_topics=3, 判断是否相似阀值为0.45,即大于0.45为true相似 )

    同模型同参数下,jieba分词结果在这里插入图片描述

    jieba分词未出现在词向量的约500多,有些词出现了好几次,而hanlp分词只有60几个未出现,且多数为名词,只出现过一次。

    4,分析
    在样本中,所有样本分词结果jieba比hanlp要多分出100个词左右。所以推测因hanlp分词细粒度大,分出词少,导致较少的共现词出现(也可能是hanlp分词精度更高,分出很多虚词被停止词表过滤造成),也就是说,lsi+tfidf模型对词细粒度大、分词少的分词器不友好,所以最后hanlp出错率更大。

    jieba与hanlp都是很不错的分词器,结巴使用更方便。hanlp准确度要高一些(感觉),而且与文中提到的词向量相匹配。

    (我免贵姓AI,jieba:我免/贵姓/AI,hanlp:我/免/贵姓/AI,实际:我/免贵/姓AI)

    参考引用:
    自然语言处理 中文分词 词性标注 命名实体识别 依存句法分析 关键词提取 新词发现 短语提取 自动摘要 文本分类 拼音简繁请添加链接描述
    本文来自 gladosAI 的CSDN 博客

    展开全文
  • pyhanlp、HanLP安装与使用

    千次阅读 2019-04-28 06:57:13
    HanLP安装使用(Windows) 安装Hanlp时候发现网上的一些介绍文章写的有些模糊,这里记录一下Python环境下安装与使用Hanlp。 首先,要明确HanLP是一个Java工具包,由很多模型、算法组成,而在学习自然语言的时候...

    pyhanlp、HanLP安装使用(Windows)

    4.28更新:对于Python来说,官方给出了HanLP的Python接口,具体见:自然语言处理工具包HanLP的Python接口,使用一个简单的pip命令就可以安装使用了,但是仍然需要安装一些环境,这里简单介绍一下,它的安装过程中各种环境的安装与之前是一样的。
    首先是安装 Java Visual C++环境以及安装 Jpype,这与之前一样。
    不同的地方在于之前安装 jar 包以及配置 data 的过程可以使用一个 pip 命令来完成,在完成上述操作后,进入控制台(Anaconda的话要进入 Anaconda Propmpt 然后 activate 到相应的环境下),然后使用:

    pip install pyhanlp
    

    注意在第一使用 from pyhanlp import *命令来导入的时候会自动下载data 以及jar包,整个过程大概由1G左右吧,所以首次运行会比较慢,第二次就快多了。
    在完成安装之后,使用与下面HanLP的测试代码一样,并且不需要启动Java虚拟机的那些环境设置。在导入之后,HanLP对象会自动创建,对于其他的对象,则可以通过JClass来创建,例如:

    StandardTokenizer = JClass("com.hankcs.hanlp.tokenizer.StandardTokenizer")
    print(StandardTokenizer.segment("使用这个工具进行标准分词"))
    

    其他对象同理创建使用。

    以下是原文

    安装Hanlp时候发现网上的一些介绍文章写的有些模糊,这里记录一下Python环境下安装与使用Hanlp。

    首先,要明确HanLP是一个Java工具包,由很多模型、算法组成,而在学习自然语言的时候一般都会使用Python吧,因此,实质上是使用Python调用Hanlp。

    具体安装步骤:

    1.安装Java 和 Visual C++环境

    首先是安装JDK,这个在Oracle的官网上就可以下载到:JDK,选择自己使用的版本即可,注意要勾选Accept那个按钮才能下载。下载完成后安装即可。不过JDK安装之后要配置一下环境变量(例如在cmd下输入java发下是“不是批处理XXX”),具体的方法网上有很多,例如:JDK环境变量配置
    接下在安装Visual C++,这个可以先看一下自己电脑是否已经安装(我记得有些游戏是会安装这个的 =_=||。。),打开控制面板(可以win+Q,在小娜的搜索框里直接搜索),在“程序”中找到已经安装的程序:
    在这里插入图片描述
    类似这样,这里安装的事Visual C++ 2015,如果没有,也可以直接在网上搜索下载:Download Visual C++ 2015,安装包很小的。

    2.安装Jpype

    Jpype是使用Python调用Java 的工具包,安装非常简单,如果是使用Anaconda(一般都会推荐使用Anaconda的吧),的话,打开Anaconda的控制台,使用activate进入想要安装的那个虚拟环境,然后调用:

    conda install -c conda-forge jpype1
    

    即可,(那个Solving enviromnment可能会转一小会),然后安装选择 Proceed ([y]/n)后输入 y即可安装。

    3.测试Python环境下调用Java

    测试仍然在Anaconda的控制台下进行,使用Python可以在控制台下进入Python环境,首先输入:

    from jpype import *
    

    测试能否正常导入。然后测试开启Java虚拟机,并进行简单输出测试

    startJVM(getDefaultJVMPath(), "-ea")
    java.lang.System.out.println("Hello")
    

    其实下面的代码就是Java中的输出语句了。如果在那个黑框框中没有显示错误信息那就说明安装成功了。可以关闭Java虚拟机:

    shutdownJVM()
    

    4.HanLP安装

    这里主要是安装HanLP的jar包和data文件,打开HanLP的github地址:HanLP,其实上面的安装介绍已经很清楚了。
    找到方法二:
    在这里插入图片描述
    首先下载data.zip(点击那个链接,这部分也在直接clone的文件里),然后下载jar和配置文件,解压后能看到里面的jar文件。
    当然,建议这两个都放在英文路径下,例如:
    在这里插入图片描述

    5.修改配置文件

    这部分在HanLP的github网页上已经做了详细介绍。
    首先打开 hanlp.properties文件,在上面第二个下载中。
    这里只需要修改第一行即可(文件里也写了):
    在这里插入图片描述
    这里将root=后面修改为存放data的那个文件夹路径,例如,我刚才的路径就是:root=D:/NLP/hanlp
    至此,完成了HanLP的安装。

    6.测试

    使用代码来测试一下安装的HanLP功能:
    发现网上代码都很经典啊。。都是一样的,可以使用这里的代码测试一下:Python中调用自然语言处理工具HanLP手记
    注意:

    from jpype import *
    
    startJVM(getDefaultJVMPath(), "-Djava.class.path=D:/NLP/hanlp/hanlp-1.7.3.jar;D:/NLP/hanlp",
             "-Xms1g",
             "-Xmx1g")
    
    HanLP = JClass('com.hankcs.hanlp.HanLP')
    

    这里的路径也就是前面存放jar和data的文件了,要注意这里的路径分隔符使用的是/,与上面配置文件的路径符号不同,这个地方出错可能会出现SyntaxError: (unicode error)这样的错误,具体可以参考:Python 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun错误解决方案

    展开全文
  • Hanlp 安装使用详解

    千次阅读 2019-07-30 15:51:19
    安装 ... conda install -c conda-forge jpype1 ...使用命令 hanlp segment 进入交互分词模式,会从github上自动下载data数据,会比较慢。可以停止命令,然后手动下载data-for-1.7.4.zip 大约640M 到pyn...
  • 自然语言处理技术之HanLP介绍

    千次阅读 2018-04-12 14:54:17
    网络上关于自然语言处理技术的分享文章很多,今天就给大家分享一下HanLP方面的内容。自然语言处理技术其实是所有与自然语言的计算机处理相关联的技术的统称,自然语言处理技术应用的目的是为了能够让计算机理解和...
  • hanlp

    2019-05-17 20:56:05
    maven方式 https://www.cnblogs.com/shaosks/p/8317611.html https://github.com/hankcs/HanLP hanlp https://gitee.com/micdp/hanlp
  • hanlp中文自然语言处理分词方法介绍

    千次阅读 2018-04-27 10:20:54
    自然语言处理在大数据以及近年来大火的人工智能方面都有着非同寻常的意义。那么,什么是自然语言处理呢?在没有接触到大数据这方面的时候,也只是以前在学习计算机方面知识时听说过自然语言处理。...
  • nlp之HanLP

    2019-11-29 17:48:35
    HanLP是一系列模型与算法组成的NLP工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。 安装hanlp step1:下载jpype1.whl, ...
  • HanLP

    千次阅读 2019-04-01 10:38:08
    下载data.zip解压并通过配置文件告诉HanLP数据包的位置(方法:修改配置文件的第一行为数据包的父目录)。 HanLP中的数据分为词典和模型,其中词典是词法分析必需的,模型是句法分析必需的。 用户可以自行增删...
  • 摘要:elasticsearch是使用比较广泛的分布式搜索引擎,es提供了一个的单字分词工具,还有一个分词插件ik使用比较广泛,hanlp是一个自然语言处理包,能更好的根据上下文的语义,人名,地名,组织机构名等来切分词...
  • hanlp资源: hanlp介绍:http://hanlp.linrunsoft.com/ hanlp下载:https://github.com/hankcs/HanLP hanlp(分词)使用:https://blog.csdn.net/nima1994/article/details/72819973 hanlp1.7:...
  • hanlp用户自定义词典添加

    千次阅读 2018-12-19 18:20:53
    1、在字典路径下添加自定义的词典:CustomDictionary主词典文本路径是data/dictionary/custom/CustomDictionary.txt,用户可以在此增加自己的词语(不推荐);也可以单独新建一个文本文件,通过配置文件;...
  • HanLP分词器的使用方法

    千次阅读 2017-09-09 17:31:04
    于是这时候便有了 HanLP-汉语言处理包 来进行提取关键词的想法。 下载:.jar .properties data等文件 这里提供官网下载地址 HanLP下载,1.3.3数据包下载 在intellij中配置环境,并运行第一个demo 在项目中配置jar...
  • python hanlp

    千次阅读 2018-05-25 17:54:03
    想要在python中调用hanlp进行中文实体识别,Ubuntu 16.04的系统环境1. 安装jpype1,在cmd窗口输入pip install jpype12. 下载hanlp的安装包在https://github.com/hankcs/HanLP/releases  (1).下载最新的 hanlp-...
  • 我使用hanlp分词,使用了自定义词典,但是我希望我的自定义词典一定出现在关键词中,请问如何修改自定义词典的优先级呢?
  • python调用hanlp分词

    千次阅读 2017-11-23 17:19:58
    jar包,data, hanlp.properties 调用代码 hanlp
  • Hanlp配置与使用

    千次阅读 2017-01-23 17:14:02
    Hanlp配置与使用由于要写NLP大作业在知乎上看见了Hanlp这个汉语言处理包。https://github.com/hankcs/HanLP配置说明对我来说写的略微简单,在这里记录一下配置的过程。MVN使用最开始接触MVN是写Spring Boot程序,...
  • 利用HanLP计算中文词语语义相似度

    千次阅读 2018-11-02 16:04:46
    HanLP官方GitHub地址 HanLP 在java项目中配置HanLP 推荐使用Maven方法 在poem.xml中加入以下代码 com.hankcs hanlp portable-1.3.3 但是在AndroidStudio中,没有Maven,所以在build.gradle的dependencies中加入...
  • hanlp源码解析之中文分词算法

    万次阅读 2019-11-27 14:25:03
    欢迎关注鄙人公众号,技术干货随时看! 技术交流qq群: 659201069 词图 ...词图指的是句子中所有词可能构成的图。如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B)。一个词可能有多个后续,...
1 2 3 4 5 ... 20
收藏数 3,512
精华内容 1,404
关键字:

hanlp