<a alt="jionlp logo">
<img src="https://github.com/dongrixinyu/JioNLP/raw/v1.3.47/blob/master/image/jionlp_logo.jpg" / style="width:300px;height:130px">
</a>
<a alt="License">
<img src="https://img.shields.io/github/license/dongrixinyu/JioNLP?color=crimson" /></a>
<a alt="Size">
<img src="https://img.shields.io/badge/size-20.1m-orange" /></a>
<a alt="Downloads">
<img src="https://img.shields.io/badge/downloads-6k-yellow" /></a>
<a alt="Version">
<img src="https://img.shields.io/badge/version-1.3.47-green" /></a>
<a href="https://github.com/dongrixinyu/JioNLP/pulse" alt="Activity">
<img src="https://img.shields.io/github/commit-activity/m/dongrixinyu/JioNLP?color=blue" /></a>
pip install jionlpimport jionlp as jio
text = '张三赔偿李大花人民币车费601,293.11元,工厂费大约一万二千三百四十五元,利息叁伍佰日元,打印费人民币十块钱。'
res = jio.ner.extract_money(text, with_parsing=False)
print(res)
# [{'text': '601,293.11元', 'offset': [12, 23], 'type': 'money'},
# {'text': '大约一万二千三百四十五元', 'offset': [27, 39], 'type': 'money'},
# {'text': '叁伍佰日元', 'offset': [42, 47], 'type': 'money'},
# {'text': '人民币十块钱', 'offset': [50, 56], 'type': 'money'}]
import jionlp as jio
text_list = ['约4.287亿美元', '两个亿卢布', '六十四万零一百四十三元一角七分', '3000多欧元', '三五佰块钱', '七百到九百亿泰铢']
moneys = [jio.parse_money(text) for text in text_list]
# 约4.287亿美元: {'num': '428700000.00', 'case': '美元', 'definition': 'blur'}
# 两个亿卢布: {'num': '200000000.00', 'case': '卢布', 'definition': 'accurate'}
# 六十四万零一百四十三元一角七分: {'num': '640143.17', 'case': '元', 'definition': 'accurate'}
# 3000多欧元: {'num': ['3000.00', '4000.00'], 'case': '欧元', 'definition': 'blur'}
# 三五百块钱: {'num': ['300.00', '500.00'], 'case': '元', 'definition': 'blur'}
# 七百到九百亿泰铢: {'num': ['70000000000.00', '90000000000.00'], 'case': '泰铢', 'definition': 'blur'}
jio.ner.extract_money 对于此字符串不予抽取,但parse_money可以将“三十五块八”看作完整的口语化金额,标准化为“35.80元”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('每周五下午4点', time.time())
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},
# 'point': {'time': ['2021-07-16 16:00:00', '2021-07-16 16:59:59'], 'string': '周五下午4点'}}}
ret_future(bool)。$ git clone https://github.com/dongrixinyu/JioNLP
$ cd ./JioNLP
$ pip install .
$ pip install jionlp
# 如安装失败,遇到安装时提示的 pkuseg、Microsoft Visual C++、gcc、g++ 等信息,
# 则说明是 pkuseg 安装失败,需要在相应系统中安装 C 和 C++ 编译器,重新安装。
# pip install pkuseg
# pkuseg 由于久未更新,对 python>=3.9 不兼容,若遇到调用报错,则须退回至 3.8 版本以下的解释器。
>>> import jionlp as jio
>>> jio.help() # 输入关键词搜索工具包是否包含某功能,如输入“回译”
>>> dir(jio)
>>> print(jio.extract_parentheses.__doc__)
$ jio_help
| 功能 | 函数 | 描述 | 星级 |
|---|---|---|---|
| 查找帮助 | help | 若不知道 JioNLP 有哪些功能,可根据命令行提示键入若干关键词做搜索 | |
| 时间语义解析 | parse_time | 给定时间文本,解析其时间语义(时间戳、时长)等 | ⭐ |
| 关键短语抽取 | extract_keyphrase | 给定一篇文本,抽取其对应关键短语 | ⭐ |
| 抽取式文本摘要 | extract_summary | 给定一篇文本,抽取其对应文摘 | |
| 停用词过滤 | remove_stopwords | 给定一个文本被分词后的词 list,去除其中的停用词 | ⭐ |
| 分句 | split_sentence | 对文本按标点分句 | ⭐ |
| 地址解析 | parse_location | 给定一个包含国内地址字符串,识别其中的省、市、县区、乡镇街道、村社等信息 | ⭐ |
| [电话号码归属地、 |
运营商解析](../../wiki/Gadget-说明文档#user-content-电话号码归属地运营商解析) |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| 给定一条数字金额,返回其汉字大写结果 | |
| 功能 | 函数 | 描述 | 星级 |
|---|---|---|---|
| 回译 | BackTranslation | 给定一篇文本,采用各大厂云平台的机器翻译接口, |
实现数据增强 |⭐ | |邻近汉字换位 |swap_char_position|随机交换相近字符的位置,实现数据增强 | | |同音词替换 |homophone_substitution|相同读音词汇替换,实现数据增强 |⭐ | |随机增删字符 |random_add_delete|随机在文本中增加、删除某个字符,对语义不造成影响 | | |NER实体替换 |replace_entity|根据实体词典,随机在文本中替换某个实体,对语义不
造成影响,也广泛适用于序列标注、文本分类 |⭐ |
| 功能 | 函数 | 描述 | 星级 |
|---|---|---|---|
| 清洗文本 | clean_text | 去除文本中的异常字符、冗余字符、HTML标签、括号信息、 |
URL、E-mail、电话号码,全角字母数字转换为半角 |⭐ | |抽取 E-mail |extract_email|抽取文本中的 E-mail,返回位置与域名 | | |解析 货币金额 |extract_money|解析货币金额字符串 |⭐ | |抽取电话号码 |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|抽取括号内容,包括 {}「」[]【】()()<>《》 |⭐ | |删除 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|删除文本中异常字符,主要保留汉字、常用的标点,
单位计算符号,字母数字等 | |
| 功能 | 函数 | 描述 | 星级 |
|---|---|---|---|
| 按行读取文件 | read_file_by_iter | 以迭代器形式方便按行读取文件,节省内存, |
支持指定行数,跳过空行 || |按行读取文件 |read_file_by_line |按行读取文件,支持指定行数,跳过空行 |⭐ | |将 list 中元素按行写入文件 |write_file_by_line| 将 list 中元素按行写入文件 |⭐ | |计时工具 |TimeIt | 统计某一代码段的耗时 | | |日志工具 |set_logger |调整工具包日志输出形式 | |
| 功能 | 函数 | 描述 | 星级 |
|---|---|---|---|
| 成语词典 | chinese_idiom_loader | 加载成语词典 | ⭐ |
| 歇后语词典 | xiehouyu_loader | 加载歇后语词典 | ⭐ |
| 中国地名词典 | china_location_loader | 加载中国省、市、县三级词典 | ⭐ |
| 中国区划调整词典 | china_location_change_loader | 加载 2018 年以来中国县级以上区划调整更名记录 | ⭐ |
| 世界地名词典 | world_location_loader | 加载世界大洲、国家、城市词典 | |
| 新华字典 | chinese_char_dictionary_loader | 加载新华字典 | |
| 新华词典 | chinese_word_dictionary_loader | 加载新华词典 |
| 功能 | 函数 | 描述 | 星级 |
|---|---|---|---|
| 抽取货币金额实体 | 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|将标注语料中的实体收集起来,形成词典 | |
| 功能 | 函数 | 描述 | 星级 |
|---|---|---|---|
| 朴素贝叶斯分析类别词汇 | analyse_freq_words | 对文本分类的标注语料,做朴素贝叶斯词频分析,返回各类 |
文本的高条件概率词汇 |⭐ | |分割数据集 |analyse_dataset|对文本分类的标注语料,切分为训练集、验证集、测试集,
并给出各个子集的分类分布统计 |⭐ |
| 功能 | 函数 | 描述 | 星级 |
|---|---|---|---|
| 基于词典情感分析 | LexiconSentiment | 依据人工构建的情感词典,计算文本的情感值,介于0~1之间 |
| 功能 | 函数 | 描述 | 星级 |
|---|---|---|---|
| word 转 tag | cws.word2tag | 将 json 格式分词序列转换为模型处理的 tag 序列 | |
| tag 转 word | cws.tag2word | 将模型处理的 tag 序列转换为 json 格式分词 | |
| 统计F1值 | cws.f1 | 比对分词标注标签于模型预测标签的F1值 |
$ claude mcp add JioNLP \
-- python -m otcore.mcp_server <graph>