Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

fix some return problems; add namener;

Project description

NLUTOOLS: NLU 工具包

nlutools 是一系列模型与算法的nlu工具包,提供以下功能:

  1. 切词
  2. 切句
  3. 词向量
  4. 句向量
  5. 预训练模型
  6. 实体
  7. 情感分析
  8. 关键字提取
  9. 句子相似性计算
  10. 动宾提取
  11. 句子合理性判定
  12. 姓名识别

1 切词

切词工具暂时提供四种模式,接口函数:cut(text, mode, pos, cut_all)

其中

  • text 为要切词的原始文本

  • mode 为分词模式,'accurate' or 'fast' (暂时只支持fast模式,请忽略这个参数)

  • pos为词性保留选项,True or False

  • cut_all为切词粒度控制 True or False (暂时只支持False, 忽略这个参数)

调用方式为:

from nlutools import tools as nlu
nlu.cut('这是一个能够输出名词短语的分词器,欢迎试用!')

返回结果:

{
    'np': ['分词器'],                   // 除去百度百科之外,其他的名词短语
    'entity' : ['名词短语'],            // 百度百科中会出现的词条
    'text': '这是一个能够输出名词短语的分词器,欢迎试用!',         // 原始文本
    'items' : ['这', '是', '一个', '能够', '输出', '名词短语', '的', '分词器', ',', '欢迎', '试用', '!'],  // 分词结果
    'pos': ['r', 'v', 'm', 'v', 'v', 'ne', 'uj', 'np', 'x', 'v', 'vn', 'x']     // 词性
}

2 切句

切句工具提供两种模式,接口函数:split(text, mode=0) 【简易接口】 or getSubSentences(text,mode=0)

其中

  • text 为需要进行切句的原始文本序列

  • mode 为切句模式,默认值0(暂时只有这个默认值,忽略这个参数吧)

调用方式:

from nlutools import tools as nlu
nlu.split(['我喜欢在春天去观赏桃花。在夏天去欣赏荷花 在秋天去观赏红叶。但更喜欢在冬天去欣赏雪景。'])

返回结果:

[['我喜欢在春天去观赏桃花', '在夏天去欣赏荷花 在秋天去观赏红叶', '但更喜欢在冬天去欣赏雪景']]

3 词向量

3.1 离线词向量

获得词向量文件,可以根据版本号获取,目前版本号包括:v1.0

默认是下载最新版。获取到的文件夹下面包含两个文件,一个是词向量文件,一个是字向量文件。

from nlutools import tools as nlu
nlu.getW2VFile('v1.0', '/local/path/')

3.2 在线词向量

 支持两个来源的词向量,腾讯版(200维)和e成版(300维),通过type参数控制('ifchange' or 'tencent', 默认ifchange)

 ifchange词向量基于全量cv工作经历,加入了领域相关实体,通过fasttext训练,没有oov问题。参考:https://fasttext.cc

 腾讯词向量具体信息参见:https://ai.tencent.com/ailab/nlp/embedding.html

3.2.1 在线请求词向量

from nlutools import tools as nlu
# type 默认'ifchange'
nlu.w2v('深度学习')
# 腾讯词向量
nlu.w2v('深度学习', type='tencent')
# 或者传入多个词
nlu.w2v(['深度学习', '机器学习'])

3.2.2 获取词向量相似的词:

from nlutools import tools as nlu
# 默认使用e成词向量
nlu.simiwords('深度学习', 10)  # 10表示最多返回10个最相似的词
# 或者传入多个词
nlu.simiwords(['深度学习', '机器学习'], 10)

3.2.3 获得两个词的相似度

from nlutools import tools as nlu
# 使用腾讯词向量
nlu.simiscore('深度学习','机器学习',type='tencent')
# 使用echeng词向量
nlu.simiscore('深度学习','机器学习',type='ifchange')

4 句向量

4.1 基于词向量

from nlutools import tools as nlu
nlu.senvec(['主要负责机器学习算法的研究', '训练模型、编写代码、以及其他一些工作'])      // 300
nlu.senvec(['主要负责机器学习算法的研究', '训练模型、编写代码、以及其他一些工作'], type = 'tencent')    // 200

返回结果:

{
    'dimention': 300,  # 维度
    'veclist': [[0.01, ...,0.56],[0.89,...,-0.08]]
}

4.2 基于bert

bert向量有两个版本:基于哈工大全词mask的预训练句向量表征;基于cv中工作经历全词mask的预训练句向量表征 调用方式:

nlu.bertvec(['主要负责机器学习算法的研究', '训练模型、编写代码、以及其他一些工作'])  # 哈工大版
nlu.bertvec(['主要负责机器学习算法的研究', '训练模型、编写代码、以及其他一些工作'], mode='cv')  # ifchange版本

5 下载预训练中文语言模型

可用的模型有:

  • base_cn: Google官方中文Base
  • wwm: 哈工大全词MASK_v1
  • wwm_ext: 哈工大全词MASK_v2
  • ernie_cv: 使用工作经历文本重新训练的ernie模型

调用方式:

# 若给定输出目录,直接进行下载
nlu.bertmodels('wwm_ext', './bert_models')

6 实体

实体识别(转发自图谱组)

基于输入的自然文本,识别 学校(school)、职能(function)、技能(skill)、学历(degree)、专业(major)、公司(company)、证书(certificate) 七大实体

nlu.ner(["我毕业于北京大学"],'ner')

返回结果:

[
    [
        {
        'type': 'school',
        'text': '北京大学',
        'boundary': [4, 8],
        'entityIdCandidates': [{'entityID': '0', 'entityName': '', 'score': 1.0}]
        }
    ]
]

7 情感分析

返回句子的情感极性,持正向和负向情感

参数说明:

  • sentences 输入的文本列表
  • prob 值为False,不返回预测句子的情感预测得分,只返回情感类别(pos或者neg);值为True,则都返回。

调用方式:

from nlutools import tools as nlu
nlu.emotion(['这家公司很棒','这家公司很糟糕'], prob=False)

返回结果:

{
    'text': ['这家公司很棒','这家公司很糟糕'],
    'labels': ['pos','neg']
}

8 关键字提取

方法:keywords(content,topk,with_weight)

参数说明:

  • content 为输入文本.
  • topk 为最大返回关键字个数. 默认3
  • with_weight 是否返回关键字的权值. 默认False

调用方式:

from nlutools import tools as nlu
nlu.keywords('主要负责机器学习算法的研究以及搭建神经网络,训练模型,编写代码,以及其他的一些工作',4,True)

返回结果:

{'weights': [9.64244, 9.36891, 6.2782, 5.69476], 'keywords': ['机器学习算法', '神经网络', '训练', '模型']}

9 句子相似度计算

句子相似有2种计算方式,

1基于ifchange词向量的句向量的cosine

2基于腾讯词向量的句向量的cosine

方法: sensimi(text1,text2,precision=100,type='ifchange')

参数说明:

  • text1 为待计算句子1
  • text2 为待计算句子2
  • precision 为计算结果刻度,如1000,则返回0~1000的值
  • type : ifchange | tencent 调用方式:
from nlutools import tools as nlu
nlu.sensimi('你家的地址是多少','你住哪里',1000)

返回结果:

{'result': 600}

10 动宾提取

方法: vob(content,mode)

参数说明:

  • content 输入文本,str
  • mode 提取模式,可选值为 fast 或accurate. 目前仅支持fast,忽略次参数

调用方式:

from nlutools import tools as nlu
nlu.vob('要负责机器学习算法的研究以及搭建神经网络,训练模型,编写代码,以及其他的一些工作')

返回结果:

{'content': [['编写', ' 代码']]}

11 句子合理性判别

方法: rationality(text,with_word_prob)

参数说明:

  • text, 带判定句子,类型是list
  • with_word_prob,返回结果中是否包含每个词合理性的概率,str,取值范围为 'true' 或 'false'。 默认'false'

调用方式:

from nlutools import tools as nlu
nlu.rationality(['床前明月光,疑是地上霜', '床前星星光,疑是地上霜', '床前白月光,疑是地上霜'])

返回结果:

 {
    'ppl': [63.2965, 187.2091, 71.3999]
 }

12 姓名识别服务

来自nb2组的姓名识别

方法: nlu.namener("刘德华的⽼老老婆叫叶丽倩")

结果: ['刘德华', '叶丽倩']

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for nlutools, version 1.17.1
Filename, size File type Python version Upload date Hashes
Filename, size nlutools-1.17.1.tar.gz (13.2 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page