/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

2023-12-12 Add MELLM

  • MELLM, short for Mutual Evaluation of Large Language Models, is an automatic evaluation algorithm of LLMs without human supervision. MELLM has been tested effectively on several LLMs and datasets test results and analysis. You can use the example code below to take a try.
  • before running this code, you should download norm_score.json and max_score.json from test data with password jmbo.
  • If you encounter any error, read the test_mellm.py to download *.json file.
$ git clone https://github.com/dongrixinyu/JioNLP
$ cd JioNLP/test/
$ python test_mellm.py
  • JioNLP 提供了一套 LLM 的测试数据集,并应用 MELLM 算法完成了自动评测。
  • 评测结果可关注公众号JioNLP,查阅具体各家评测截图pdf。
>>> import jionlp as jio
>>> llm_test = jio.llm_test_dataset_loader(version='1.1')
>>> print(llm_test[15])
>>> llm_test = jio.llm_test_dataset_loader(field='math')
>>> print(llm_test[5])

安装 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 的版本
>>> dir(jio)
>>> print(jio.extract_parentheses.__doc__)
  • 星级⭐代表优质特色功能

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 ⭐

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

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

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

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