本文为本人学习pyhanlp的笔记,大多知识点来源于GitHubhttps://github.com/hankcs/HanLP/blob/master/README.md,文中的demo代码来源于该GitHub主

what's the pyhanlp  

  pyhanlp是HanLP的Python接口,支持自动下载与升级HanLP,兼容py2、py3。

安装

pip install pyhanlp

 

安装时可能遇到的问题:

  • 报错:error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual

  解决方法:手动下载,下载链接:https://pan.baidu.com/s/1WaBxFghTll6Zofz1DGOZBg

  

  • 报错:jpype._jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly.

  解决方法:HanLP主项目采用Java开发,所以需要Java运行环境,请安装JDK。需要保证JDK位数、操作系统位数和Python位数一致。pyhanlp在64位系统上通过了所有测试;在32位系统上可以运行但不做保证。

 

配置

  默认在首次调用pyhanlp时自动下载jar包和数据包,并自动完成配置。 

  如果网速慢或者其他问题导致配置失败,需要自行下载data文件,然后放入pyhanlp文件的static目录中。下载地址:http://nlp.hankcs.com/download.php?file=data

  如果还是失败,请参考https://github.com/hankcs/pyhanlp/wiki/手动配置

 

一、标准中文分词

  使用命令hanlp segment进入交互分词模式,输入一个句子并回车,HanLP会输出分词结果:

$ hanlp segment
商品和服务
商品/n 和/cc 服务/vn

当下雨天地面积水分外严重
当/p 下雨天/n 地面/n 积水/n 分外/d 严重/a

龚学平等领导说,邓颖超生前杜绝超生
龚学平/nr 等/udeng 领导/n 说/v ,/w 邓颖超/nr 生前/t 杜绝/v 超生/vi

 

还可以重定向输入输出到文件等:

$ hanlp segment <<< '欢迎新老师生前来就餐'               
欢迎/v 新/a 老/a 师生/n 前来/vi 就餐/vi

 

在Python中的实现

from pyhanlp import *

print(HanLP.segment('你好,欢迎在Python中调用HanLP的API')) 
# [你好/vl, ,/w, 欢迎/v, 在/p, Python/nx, 中/f, 调用/v, HanLP/nx, 的/ude1, API/nx]
###################
for term in HanLP.segment('下雨天地面积水'):
    print('{}\t{}'.format(term.word, term.nature)) # 获取单词与词性

'''
下雨天    n
地面    n
积水    n
'''
###################
testCases = [
    "商品和服务",
    "结婚的和尚未结婚的确实在干扰分词啊",
    "买水果然后来世博园最后去世博会",
    "中国的首都是北京",
    "欢迎新老师生前来就餐",
    "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作",
    "随着页游兴起到现在的页游繁盛,依赖于存档进行逻辑判断的设计减少了,但这块也不能完全忽略掉。"]
for sentence in testCases:
    print(HanLP.segment(sentence))
'''
[商品/n, 和/cc, 服务/vn]
[结婚/vi, 的/ude1, 和/cc, 尚未/d, 结婚/vi, 的/ude1, 确实/ad, 在/p, 干扰/vn, 分词/n, 啊/y]
[买/v, 水果/n, 然后/c, 来/vf, 世博园/n, 最后/f, 去/vf, 世博会/n]
[中国/ns, 的/ude1, 首都/n, 是/vshi, 北京/ns]
[欢迎/v, 新/a, 老/a, 师生/n, 前来/vi, 就餐/vi]
[工信处/n, 女干事/n, 每月/t, 经过/p, 下属/v, 科室/n, 都/d, 要/v, 亲口/d, 交代/v, 24/m, 口/n, 交换机/n, 等/udeng, 技术性/n, 器件/n, 的/ude1, 安装/v, 工作/vn]
[随着/p, 页游/nz, 兴起/v, 到/v, 现在/t, 的/ude1, 页游/nz, 繁盛/a, ,/w, 依赖于/v, 存档/vi, 进行/vn, 逻辑/n, 判断/v, 的/ude1, 设计/vn, 减少/v, 了/ule, ,/w, 但/c, 这/rzv, 块/q, 也/d, 不能/v, 完全/ad, 忽略/v, 掉/v, 。/w]
'''

 

说明

  • HanLP中有一系列“开箱即用”的静态分词器,以Tokenizer结尾,在接下来的例子中会继续介绍。
  • HanLP.segment其实是对StandardTokenizer.segmen的包装。
  • 分词结果包含词性,每个词性的意思请查阅《HanLP词性标注集》

算法详解

 

二、关键词提取、自动摘要

# 关键词提取
document = "水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露," \
           "根据刚刚完成了水资源管理制度的考核,有部分省接近了红线的指标," \
           "有部分省超过红线的指标。对一些超过红线的地方,陈明忠表示,对一些取用水项目进行区域的限批," \
           "严格地进行水资源论证和取水许可的批准。"
print(HanLP.extractKeyword(document, 2)) # [水资源, 陈明忠]
# 自动摘要
print(HanLP.extractSummary(document, 3)) # [严格地进行水资源论证和取水许可的批准, 水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露, 有部分省超过红线的指标]
# # -*- coding:utf-8 -*-

from pyhanlp import *


def demo_keyword(content):
    """ 关键词提取

    [程序员, 程序, 分为, 人员, 软件]
    """
    TextRankKeyword = JClass("com.hankcs.hanlp.summary.TextRankKeyword")
    keyword_list = HanLP.extractKeyword(content, 5)
    print(keyword_list)


if __name__ == "__main__":
    content = (
       "程序员(英文Programmer)是从事程序开发、维护的专业人员。"
       "一般将程序员分为程序设计人员和程序编码人员,"
       "但两者的界限并不非常清楚,特别是在中国。"
       "软件从业人员分为初级程序员、高级程序员、系统"
       "分析员和项目经理四大类。")
    demo_keyword(content)
关键词提取demo_keyword.py

相关文章:

  • 2022-12-23
  • 2021-05-05
  • 2022-01-08
  • 2022-01-08
  • 2021-11-18
  • 2021-11-08
  • 2022-12-23
猜你喜欢
  • 2022-01-08
  • 2021-09-09
  • 2022-12-23
  • 2021-11-27
  • 2021-08-05
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案