JioNLP:中文 NLP 预处理、解析工具包 A Python Lib for Chinese NLP Preprocessing & Parsing
pip install jionlp
安装:-
JioNLP 是一个面向 NLP 开发者的工具包,提供 NLP 任务预处理、解析功能,准确、高效、零使用门槛。请下拉本网页,查阅具体功能信息,并按 Ctrl+F 进行搜索。JioNLP在线版 可快速试用部分功能。关注同名微信公众号 JioNLP 可获取最新的 NLP 资讯,数据资源。
清洗 html 文本
2023-07-03 添加- 对于爬虫 html 格式文本的统一化清洗方法,得到的文本数据可用于语言模型预训练。
- 当然,由于不同网页 html 文本差异极大,针对特定数据还需要特殊的清洗方法,需要在本方法基础上进一步修正和改进。
>>> import jionlp as jio
>>> html_text = '<html><body>....</body></html>'
>>> res = jio.clean_html(html_text)
>>> print(res)
大语言模型 LLM 评测数据集
2023-05-01 添加- LLM 各个厂家都在做自研,都声称对标 ChatGPT,那就出一份数据集,测试一下各家模型效果究竟如何?
- 主要针对中文,覆盖语言模型能力的各个方面。
- 评测结果可关注公众号JioNLP,查阅具体各家评测截图pdf。
>>> import jionlp as jio
>>> llm_test = jio.llm_test_dataset_loader()
>>> print(llm_test[15])
Byte-level BPE
2023-02-21 添加 Byte-level BPE 算法- 基于字节的 BPE 算法,适用于多语言token编码,目前仅实现了 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��'
正则判断类函数族
2022-11-28 更新jio.check_any_chinese_char 检查文本中是否包含中文字符
>>> import jionlp as jio
>>> print(jio.check_any_chinese_char('【新华社消息】(北京时间)从昨天...'))
# True
安装 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.词典加载与使用
功能 | 函数 | 描述 | 星级 |
---|---|---|---|
大语言模型 LLM 评测数据集 | jio.llm_test_dataset_loader | LLM 评测数据集 | |
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 或者扫码请作者喝杯咖啡 (●'◡'●),开源项目完全用爱发电,谢谢啦!推荐优先使用【支付宝】 ~~
- 感谢致谢名单中赞助的小伙伴们,你们的打赏让我更有动力