/JioNLP

中文 NLP 预处理、解析工具包,准确、高效、易用 A Chinese NLP Preprocessing & Parsing Package www.jionlp.com

Primary LanguagePythonApache License 2.0Apache-2.0

   ——JioNLP:中文 NLP 预处理工具包 A Python Lib for Chinese NLP Preprocessing & Parsing

   ——安装:pip install jionlp

   ——JioNLP在线版 可快速试用部分功能

   ——关注微信公众号 “JioNLP” 可获取最新的 JioNLP 更新,及 NLP 资讯

  • 做 NLP 任务,需要清洗、过滤语料?用 JioNLP
  • 做 NLP 任务,需要做信息抽取?用 JioNLP
  • 做 NLP 任务,需要数据增强?用 JioNLP
  • 做 NLP 任务,需要给模型添加偏旁、拼音、词典、繁体转换信息?用 JioNLP

总之,JioNLP 提供 NLP 任务预处理功能,准确、高效、零使用门槛,并提供一步到位的查阅入口。请下拉网页,查阅具体功能信息,并按 Ctrl + F 进行搜索。

ChatGPT面前,JioNLP-工具的价值在何处?

Update 2023-02-21

添加 Byte-level BPE 算法Byte-level BPE

  • 目前仅实现了 Byte-level BPE 算法中 Byte-level 部分
>>> import jionlp as jio
>>> res = jio.bpe.byte_level_bpe.encode('メトロ')
>>> res = jio.bpe.byte_level_bpe.decode('ãĥ¡ãĥĪdsãĥŃ')
# 'メトdsロ'
>>> res = jio.bpe.byte_level_bpe.decode('ãĥ¡ãĥĪãdsĥŃ')
# 'メト�ds��'

Update 2022-11-28

jio.check_any_chinese_char 检查文本中是否包含中文字符

>>> import jionlp as jio
>>> print(jio.check_any_chinese_char('【新华社消息】(北京时间)从昨天...'))

# True

Updata 2022-05-26

jio.keyphrase.extract_keyphrase 对一篇文本关键短语抽取

>>> import jionlp as jio
>>> text = '浑水创始人:七月开始调查贝壳,因为“好得难以置信” 2021年12月16日,做空机构浑水在社交媒体上公开表示,正在做空美股上市公司贝壳...'

>>> keyphrases = jio.keyphrase.extract_keyphrase(text)
>>> print(keyphrases)
>>> print(jio.keyphrase.extract_keyphrase.__doc__)

# ['浑水创始人', '开始调查贝壳', '做空机构浑水', '美股上市公司贝壳', '美国证监会']

Update 2022-07-02

jio.parse_time 给定时间字符串,解析其为时间戳、时长等。

import time
import jionlp as jio
res = jio.parse_time('今年9月', time_base={'year': 2021})
res = jio.parse_time('零三年元宵节晚上8点半', time_base=time.time())
res = jio.parse_time('一万个小时')
res = jio.parse_time('100天之后', time.time())
res = jio.parse_time('四月十三', lunar_date=False)
res = jio.parse_time('每周五下午4点', time.time(), period_results_num=2)
print(res)

# {'type': 'time_span', 'definition': 'accurate', 'time': ['2021-09-01 00:00:00', '2021-09-30 23:59:59']}
# {'type': 'time_point', 'definition': 'accurate', 'time': ['2003-02-15 20:30:00', '2003-02-15 20:30:59']}
# {'type': 'time_delta', 'definition': 'accurate', 'time': {'hour': 10000.0}}
# {'type': 'time_span', 'definition': 'blur', 'time': ['2021-10-22 00:00:00', 'inf']}
# {'type': 'time_period', 'definition': 'accurate', 'time': {'delta': {'day': 7}, 
# {'type': 'time_point', 'definition': 'accurate', 'time': ['2022-04-13 00:00:00', '2022-04-13 23:59:59']}
#  'point': {'time': [['2021-07-16 16:00:00', '2021-07-16 16:59:59'],
#                     ['2021-07-23 16:00:00', '2021-07-23 16:59:59']], 'string': '周五下午4点'}}}
  • 目前支持年月日、时分秒、星期、季节、季度、节日、农历、时间范围、时间段、时间周期、模糊时间代词等解析。
  • 支持对未来时间优先选择,参数为ret_future(bool)
  • 关于时间语义解析
  • 目前支持的所有 测试用例

完整示例

JioNLP源站-时间抽取与解析

安装 Installation

  • python>=3.6 github 版本略领先于 pip
$ git clone https://github.com/dongrixinyu/JioNLP
$ cd ./JioNLP
$ pip install .
  • pip 安装
$ pip install jionlp

使用 Features

  • 导入工具包,查看工具包的主要功能与函数注释
>>> import jionlp as jio
>>> print(jio.__version__)  # 查看 jionlp 的版本
>>> jio.help()  # 输入关键词搜索工具包是否包含某功能,如输入“回译”
>>> dir(jio)
>>> print(jio.extract_parentheses.__doc__)
  • 在 Linux 系统,可使用以下命令做搜索:
$ jio_help
  • 星级⭐代表优质特色功能

1.小工具集 Gadgets

功能 函数 描述 星级
查找帮助 help 若不知道 JioNLP 有哪些功能,可根据命令行提示键入若干关键词做搜索
车牌号解析 parse_motor_vehicle_licence_plate 给定一个车牌号,对其进行解析
时间语义解析 parse_time 给定时间文本,解析其时间语义(时间戳、时长)等
关键短语抽取 extract_keyphrase 给定一篇文本,抽取其对应关键短语
抽取式文本摘要 extract_summary 给定一篇文本,抽取其对应文摘
停用词过滤 remove_stopwords 给定一个文本被分词后的词 list,去除其中的停用词
分句 split_sentence 对文本按标点分句
地址解析 parse_location 给定一个包含国内地址字符串,识别其中的省、市、县区、乡镇街道、村社等信息
电话号码归属地
运营商解析
phone_location
cell_phone_location
landline_phone_location
给定一个电话号码(手机号、座机号)字符串,识别其中的省、市、运营商
新闻地名识别 recognize_location 给定新闻文本,识别其中的国内省、市、县,国外国家、城市等信息
公历农历日期互转 lunar2solar
solar2lunar
给定某公(农)历日期,将其转换为农(公)历
身份证号解析 parse_id_card 给定一个身份证号,识别对应的省、市、县、出生年月、
性别、校验码等信息
成语接龙 idiom_solitaire 成语接龙,即前一成语的尾字和后一成语的首字(读音)相同
色情数据过滤 - -
反动数据过滤 - -
体转 tra2sim 繁体转简体,支持逐字转最大匹配两种模式
体转 sim2tra 简体转繁体,支持逐字转最大匹配两种模式
汉字转拼音 pinyin 找出中文文本对应的汉语拼音,并可返回声母韵母声调
汉字转偏旁与字形 char_radical 找出中文文本对应的汉字字形结构信息,
包括偏旁部首(“河”氵)、字形结构(“河”左右结构)、
四角编码(“河”31120)、汉字拆解(“河”水可)、
五笔编码(“河”ISKG)
金额数字转汉字 money_num2char 给定一条数字金额,返回其汉字大写结果
新词发现 new_word_discovery 给定一语料文本文件,统计其中高可能成词

2.数据增强

功能 函数 描述 星级
回译 BackTranslation 给定一篇文本,采用各大厂云平台的机器翻译接口,
实现数据增强
邻近汉字换位 swap_char_position 随机交换相近字符的位置,实现数据增强
同音词替换 homophone_substitution 相同读音词汇替换,实现数据增强
随机增删字符 random_add_delete 随机在文本中增加、删除某个字符,对语义不造成影响
NER实体替换 replace_entity 根据实体词典,随机在文本中替换某个实体,对语义不
造成影响,也广泛适用于序列标注、文本分类

3.正则抽取与解析

功能 函数 描述 星级
清洗文本 clean_text 去除文本中的异常字符、冗余字符、HTML标签、括号信息、
URL、E-mail、电话号码,全角字母数字转换为半角
抽取 E-mail extract_email 抽取文本中的 E-mail,返回位置域名
解析 货币金额 extract_money 解析货币金额字符串
抽取微信号 extract_wechat_id 抽取微信号,返回位置
抽取电话号码 extract_phone_number 抽取电话号码(含手机号座机号),返回域名类型位置
抽取**身份证 ID extract_id_card 抽取身份证 ID,配合 jio.parse_id_card 返回身份证的
详细信息(省市县出生日期性别校验码)
抽取 QQ extract_qq 抽取 QQ 号,分为严格规则和宽松规则
抽取 URL extract_url 抽取 URL 超链接
抽取 IP地址 extract_ip_address 抽取 IP 地址
抽取括号中的内容 extract_parentheses 抽取括号内容,包括 {}「」[]【】()()<>《》
抽取车牌号 extract_motor_vehicle_licence_plate 抽取大陆车牌号信息
删除 E-mail remove_email 删除文本中的 E-mail 信息
删除 URL remove_url 删除文本中的 URL 信息
删除 电话号码 remove_phone_number 删除文本中的电话号码
删除 IP地址 remove_ip_address 删除文本中的 IP 地址
删除 身份证号 remove_id_card 删除文本中的身份证信息
删除 QQ remove_qq 删除文本中的 qq 号
删除 HTML标签 remove_html_tag 删除文本中残留的 HTML 标签
删除括号中的内容 remove_parentheses 删除括号内容,包括 {}「」[]【】()()<>《》
删除异常字符 remove_exception_char 删除文本中异常字符,主要保留汉字、常用的标点,
单位计算符号,字母数字等
删除冗余字符 remove_redundant_char 删除文本中冗余重复字符
归一化 E-mail replace_email 归一化文本中的 E-mail 信息为<email>
归一化 URL replace_url 归一化文本中的 URL 信息为<url>
归一化 电话号码 replace_phone_number 归一化文本中的电话号码为<tel>
归一化 IP地址 replace_ip_address 归一化文本中的 IP 地址为<ip>
归一化 身份证号 replace_id_card 归一化文本中的身份证信息为<id>
归一化 QQ replace_qq 归一化文本中的 qq 号为<qq>
判断文本是否包含中文字符 check_any_chinese_char 检查文本中是否包含中文字符,若至少包含一个,则返回 True
判断文本是否全部是中文字符 check_all_chinese_char 检查文本中是否全部是中文字符,若全部都是,则返回 True
判断文本是否包含阿拉伯数字 check_any_arabic_num 检查文本中是否包含阿拉伯数字,若至少包含一个,则返回 True
判断文本是否全部是阿拉伯数字 check_all_arabic_num 检查文本中是否全部是阿拉伯数字,若全部都是,则返回 True

4.文件读写工具

功能 函数 描述 星级
按行读取文件 read_file_by_iter 以迭代器形式方便按行读取文件,节省内存,
支持指定行数跳过空行
按行读取文件 read_file_by_line 按行读取文件,支持指定行数跳过空行
将 list 中元素按行写入文件 write_file_by_line 将 list 中元素按行写入文件
计时工具 TimeIt 统计某一代码段的耗时
日志工具 set_logger 调整工具包日志输出形式

5.词典加载与使用

功能 函数 描述 星级
Byte-level BPE jio.bpe.byte_level_bpe Byte-level-BPE 算法
停用词词典 jio.stopwords_loader() 综合了百度、jieba、讯飞等的停用词词典
成语词典 chinese_idiom_loader 加载成语词典
歇后语词典 xiehouyu_loader 加载歇后语词典
**地名词典 china_location_loader 加载**省、市、县三级词典
**区划调整词典 china_location_change_loader 加载 2018 年以来**县级以上区划调整更名记录
世界地名词典 world_location_loader 加载世界大洲、国家、城市词典
新华 chinese_char_dictionary_loader 加载新华字典
新华 chinese_word_dictionary_loader 加载新华词典

6.实体识别(NER)算法辅助工具集

功能 函数 描述 星级
抽取货币金额实体 extract_money 从文本中抽取出货币金额实体
抽取时间实体 extract_time 从文本中抽取出时间实体
基于词典NER LexiconNER 依据指定的实体词典,前向最大匹配实体
entity 转 tag entity2tag 将 json 格式实体转换为模型处理的 tag 序列
tag 转 entity tag2entity 将模型处理的 tag 序列转换为 json 格式实体
token 转 token char2word 将字符级别 token 转换为词汇级别 token
token 转 token word2char 将词汇级别 token 转换为字符级别 token
比较标注与模型预测的实体差异 entity_compare 针对人工标注的实体,与模型预测出的实体结果
,做差异比对
NER模型预测加速 TokenSplitSentence
TokenBreakLongSentence
TokenBatchBucket
对 NER 模型预测并行加速的方法
分割数据集 analyse_dataset 对 NER 标注语料,分为训练集、验证集、测试集,并给出各个子集的实体类型分布统计
实体收集 collect_dataset_entities 将标注语料中的实体收集起来,形成词典

7.文本分类

功能 函数 描述 星级
朴素贝叶斯分析类别词汇 analyse_freq_words 对文本分类的标注语料,做朴素贝叶斯词频分析,返回各类
文本的高条件概率词汇
分割数据集 analyse_dataset 对文本分类的标注语料,切分为训练集、验证集、测试集,
并给出各个子集的分类分布统计

8.情感分析

功能 函数 描述 星级
基于词典情感分析 LexiconSentiment 依据人工构建的情感词典,计算文本的情感值,介于0~1之间

9.分词

功能 函数 描述 星级
word 转 tag cws.word2tag 将 json 格式分词序列转换为模型处理的 tag 序列
tag 转 word cws.tag2word 将模型处理的 tag 序列转换为 json 格式分词
统计F1值 cws.f1 比对分词标注标签于模型预测标签的F1值
分词数据矫正-标准词典 cws.CWSDCWithStandardWords 使用标准词典对分词标注数据进行矫正和修复

文献引用

  • 若论文需要进行引用,可复制以下引用:

Chengyu Cui, JioNLP, (2020), GitHub repository, https://github.com/dongrixinyu/JioNLP

初衷

  • NLP 预处理与解析至关重要,且非常耗时。本 lib 能快速辅助完成各种琐碎的预处理、解析操作,加速开发进度,把有限的精力用在思考而非 code 上。
  • 如有功能建议、bug,可通过 issue 按模板提出。
  • 非常欢迎各位 NLP 开发者和研究者 合作完善本工具包,添加新功能

如本工具对您有帮助,请点一下右上角 star ⭐

或者扫码请作者喝杯咖啡 (●'◡'●),开源项目完全用爱发电,谢谢啦!推荐优先使用【支付宝】 ~~

  • 感谢致谢名单中赞助的小伙伴们,你们的打赏让我更有动力

image

做 NLP不易,欢迎加入自然语言处理 Wechat 交流群

请扫以下码,或wx搜索公众号JioNLP”,关注并回复【进群】

image