-
Notifications
You must be signed in to change notification settings - Fork 415
正则抽取与解析 说明文档
抽取文本中的 E-mail 信息,并返回其在文本中的位置offset,以及所属域名domain_name。
>>> import jionlp as jio
>>> text = '请发简历至[email protected]。'
>>> emails = jio.extract_email(text, detail=True))
# [{'text': '[email protected]',
# 'offset': [6, 18],
# 'domain_name': '163'},
- 暂不支持带中文字符的邮箱名称。
- 配合
jio.ner.extract_money
jio.ner.extract_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'}
- 支持标准数字格式,如:1,034,192.07元
- 支持纯数字格式,如:987273.3美元
- 支持大写中文金额,如:柒仟六佰零弎萬肆仟叁佰贰拾壹元伍分
- 支持混合格式,如:1.26万港元
- 支持修饰词解析,如:将近6万块钱、至少1000块钱以上
- 支持模糊金额解析,如:两万多元钱,6千多亿日元
- 支持口语化中文格式,如:三十五块三毛;但对于“三十五块八”这样的字符串,在文本中存在歧义,如“三十五块八颗糖”等,因此,
jio.ner.extract_money
对于此字符串不予抽取,但parse_money
可以将“三十五块八”看作完整的口语化金额,标准化为“35.80元” - 支持多种常见货币类型:人民币,港元,澳门元,美元,日元,澳元,韩元,卢布,英镑,马克,法郎,欧元,加元, 泰铢等。
抽取文本中的电话号码信息,并返回其在文本中的位置offset,以及电话号码类别type,包括手机(cell_phone)和座机(landline_phone)。
>>> import jionlp as jio
>>> text = '有疑问请联系张小姐18340234920,或拨打(028)58291283。。'
>>> phones = jio.extract_phone_number(text, detail=True))
# [{'text': '18340234920',
# 'offset': [9, 18],
# 'type': 'cell_phone'},
# {'text': '(028)58291283',
# 'offset': [24, 35],
# 'type': 'landline_phone'}]
- 支持解析手机号码归属地 和 座机区号归属地解析,须配合
jio.phone_location
使用
抽取文本中的 QQ 号,由于qq号特征不突出,故分为严格和非严格两种,默认 strict 为 True。
# 例 1
>>> import jionlp as jio
>>> text = '你加一下我的QQ: 123410942'
>>> res = jio.extract_qq(text, detail=True))
>>> print(res)
# [{'text': '123410942', 'offset': [11, 18]}]
# 例 2
>>> text = '收纳金额为123410942元,进而导致...'
>>> res = jionlp.extract_qq(text, detail=True)
>>> print(res)
# []
- QQ 号特征不突出指的是 11位的 QQ 号会和 11位的电话号码,甚至其它数据格式等混淆
- 宽松规则指符合 QQ 号特征的号码全部抽取,可能造成一定的混淆
- 严格规则指在满足 QQ 号本身特征基础上,文本须包含 qq、QQ、加Q 等字样
抽取文本中的微信号,由于微信号特征不突出,很容易和一些字母、数字字符串混淆,故分为严格和非严格两种,默认 strict 为 True。
# 例 1
>>> import jionlp as jio
>>> text = '请添加我的微信号dongrixinyu89,然后回复关注'
>>> res = jio.extract_wechat_id(text, detail=True))
>>> print(res)
# [{'text': 'dongrixinyu89', 'offset': (8, 21)}]
# 例 2
>>> text = '请添加我的号dongrixinyu89,然后回复关注'
>>> res = jionlp.extract_qq(text, detail=True, strict=True)
>>> print(res)
# []
- 微信号特征不突出指的是其会和其它常见的字母数字字符串混淆,甚至其它数据格式等混淆。微信官方定义的微信号规则:
1、可使用6-20个字母、数字、下划线和减号; 2、必须以字母开头(字母不区分大小写); 3、不支持设置中文。 - 宽松规则指符合微信号特征的号码全部抽取,可能造成一定的混淆,非常不建议这样做。
-
严格规则指在满足微信号本身特征基础上,文本须包含
微信:
、wx:
、wechat:
等字样
抽取文本中的身份证号,与 jionlp.parse_id_card
函数配合使用解析身份证号中的地址、出生年月、性别、校验码等信息
>>> text = '此人身份证号是 21040319560330098x,曾经...'
>>> res = jionlp.extract_id_card(text, detail=True)
>>> print(res)
# [{'text': '21040319560330098x', 'offset': [9, 25]}]
>>> res = jionlp.parse_id_card(res[0]['text'])
抽取文本中的超链接,包括 http、https、ftp 等类型。
>>> text = '让我这个手机知乎党来终结这个问题吧!http://link.ipaiban.com/#手机文字链接生成器!'
>>> res = jionlp.extract_id_card(text, detail=False)
>>> print(res)
# ['http://link.ipaiban.com/']
抽取文本中的车牌号,仅限于大陆车牌号,具体详情及类型参阅print(jio.extract_motor_vehicle_licence_plate.__doc__)
。
>>> import jionlp as jio
>>> text = '那车牌号多少来着?川A·23047B最近10分钟'
>>> res = jio.extract_motor_vehicle_licence_plate(text, detail=False)
>>> print(res)
# ['川A·23047B']
- 该方法抽取到车牌号后,可配合
jio.parse_motor_vehicle_licence_plate
方法进行车牌号解析。
抽取文本中的 ip 地址,仅限于 ipv4。
>>> text = '链接ip地址你知道吗?是0.0.0.0!'
>>> res = jionlp.extract_ip_address(text, detail=False)
>>> print(res)
# ['0.0.0.0']
- 支持判断 ip 地址值介于 0~255 之间,超过则不会返回结果
抽取文本中的括号中的内容,括号类型主要包括 {}「」[]【】()()<>《》
>>> text = '【重磅新闻】特朗普选举失利'
>>> res = jionlp.extract_parentheses(text)
>>> print(res)
# ['【重磅新闻】']
- 若括号仅只有半个,则不做处理,如“【重磅新闻,特朗普选举失利”
-
parentheses
参数默认为{}「」[]【】()()<>《》
,可根据需要进行指定,如仅抽取书报名时,可指定为《》
删除文本中的 E-mail 信息,一般用于将其当做无关噪声,处理分析数据。
>>> text = '张晨星[email protected],现在电子邮件可以带中文了吗?'
>>> res = jionlp.remove_email(text)
>>> print(res)
# '张晨星,现在电子邮件可以带中文了吗?'
- 从该例中可知,不支持电子邮件的中文格式。
删除文本中的括号中的内容,括号类型主要包括 {}「」[]【】()()<>《》
>>> text = '【重磅新闻】特朗普选举失利'
>>> res = jionlp.remove_parentheses(text)
>>> print(res)
# ['特朗普选举失利']
- 若括号仅只有半个,则不做处理
删除文本中的 url 信息,一般用于将其当做无关噪声,处理分析数据。
>>> text = '让我这个手机知乎党来终结这个问题吧!http://link.ipaiban.com/#手机文字链接生成器!'
>>> res = jionlp.remove_url(text)
>>> print(res)
# '让我这个手机知乎党来终结这个问题吧!#手机文字链接生成器!'
- 若整个字符串全部为 URL,则仅返回空字符串
删除文本中的 IP 信息,一般用于将其当做无关噪声,处理分析数据。
>>> text = 'https://10.28.104.169/pdf/2004.03705.pdf'
>>> res = jionlp.remove_ip_address(text)
>>> print(res)
# 'https:///pdf/2004.03705.pdf'
- 一般首先删除 URL,然后删除 IP 地址。否则可能如上例造成 URL 格式错误。
删除文本中的身份证信息,一般用于将其当做无关噪声,处理分析数据。
>>> text = '此人身份证号是 21040319560330098x,曾经...'
>>> res = jionlp.remove_id_card(text)
>>> print(res)
# '此人身份证号是 ,曾经...'
删除文本中的 QQ 号信息,一般用于将其当做无关噪声,处理分析数据。
>>> text = '你加一下我的QQ: 123410942'
>>> res = jionlp.remove_qq(text)
>>> print(res)
# '你加一下我的QQ: '
- 该方法中提供了严格匹配 qq 字符的规则,采用
strict
(bool) 参数实现
删除文本中的 html 信息,一般用于将其当做无关噪声,处理分析数据。
>>> text = '''<!-- '"` -->中国<!-- </textarea>美国经济风险</xmp> -->go to the airport<form class="logout-form" action="/logout" accept-charset="UTF-8" method="post">'''
>>> res = jionlp.remove_html_tag(text)
>>> print(res)
# '中国<!-- 美国经济风险 -->go to the airport'
- 该方法中无法删除包含有中文字符的 html 标签,出于此类标签依然包含有效信息的考虑。
删除文本中的电话号码信息
>>> import jionlp as jio
>>> text = '有疑问请联系张小姐18340234920,或拨打(028)58291283。。'
>>> phones = jio.remove_phone_number(text))
# '有疑问请联系张小姐,或拨打。。'
删除文本中的异常字符,一般用于剔除无关噪声,处理分析数据。
>>> text = '''中国人民坚强伟大√~~'''
>>> res = jionlp.remove_exception_char(text)
>>> print(res)
# '中国人民坚强伟大~~'
- 该方法默认保留常用的标点、英文字母、多种形式编码的数字(如全角12,①等)、常用数学物理单位,汉字集。
- 该方法默认删除不常见的符号(如︻Ù等)、日文、俄文、希腊字母、不常见的数学物理单位与运算符。不常见的中文字符。unicode 编码的扩展集等。
- 正则表达式位于
JioNLP/jionlp/rule/JioNLP/jionlp/rule
中的EXCEPTION_PATTERN
,如有特殊需求可以自行修改。
删除文本中的冗余字符,一般用于剔除冗余噪声,处理分析数据。
>>> text = '''那个家伙巨搞笑,笑死我啦哈哈哈哈哈哈哈哈哈~~~~~~~~~'''
>>> res = jionlp.remove_redundant_char(text)
>>> print(res)
# '那个家伙巨搞笑,笑死我啦哈~'
- 该方法默认对冗余字符仅保留一个。
- 该方法默认
redundant_chars
为关键字参数,用于指定自定义的冗余字符集。若不指定,则加载默认的冗余字符集。 - 默认的冗余字符集位于
JioNLP/jionlp/rule/JioNLP/jionlp/rule
中的REDUNDANT_PATTERN
,如有特殊需求可以自行修改。
清洗文本,步骤包括去除 html 标签、去除异常字符、去除冗余字符、去除括号补充内容、去除 URL、去除 E-mail、去除电话号码,将全角字母数字空格替换为半角,一般用于将其当做无关噪声,处理分析数据。
>>> text = '''<p><br></p> <p><span>在17日举行的十三届全国人大一次会议记者会上,环境保护部部长李干杰就“打好污染防治攻坚战”相关问题回答记者提问。李干杰表示
,打好污染防治攻坚战,未来将聚焦“围绕三类目标,突出三大领域,强化三个基础”开展具体工作。</span></p><p><span>顶层设计聚焦“三个三”</span></p><p><span>党的十八大以来>,我国生态环境保护工作乃至整个生态文明建设工作,决心之大、力度之大、成效之大前所未有,取得了历史性成就,发生了历史性变革。(责任编辑:唐小林)联系电话:13302130583,邮箱:[email protected]~~~~'''
>>> res = jionlp.clean_text(text)
>>> print(res)
>>> print(jionlp.clean_text.__doc__)
# ' 在17日举行的十三届全国人大一次会议记者会上,环境保护部部长李干杰就“打好污染防治攻坚战”相关问题回答记者提问。李干杰表示,打好污染防治攻坚战,未来将
聚焦“围绕三类目标,突出三大领域,强化三个基础”开展具体工作。顶层设计聚焦“三个三”党的十八大以来,我国生态环境保护工作乃至整个生态文明建设工作,决心之大、力度之大、>成效之大前所未有,取得了历史性成就,发生了历史性变革。联系电话:,邮箱:~'
- 去除异常字符主要指由于非 UTF-8 编码造成的异常字符,如“板簳浠?拷涔”等
- 去除冗余字符主要指文本中有多个连续的空格,“~~~~”等重复冗余信息,缩减为1个字符。
- 该方法中的所有关键字参数均为 bool 型,支持选择控制是否去除相应类型的数据
给定一条数字金额,返回其汉字大写结果。
>>> import jionlp as jio
>>> num = 120402810.03
>>> print(jio.money_num2char(num, sim_or_tra='tra'))
>>> num = '38,009.0'
>>> print(jio.money_num2char(num, sim_or_tra='sim'))
# 壹亿贰仟零肆拾萬贰仟捌佰壹拾點零叁
# 三万八千零九
-
sim_or_tra('sim'|'tra')
参数控制返回的汉字数字为“一”或“壹”。 - 最多支持12位整数位数字,即“千亿”
替换文本中的 E-mail 信息为一个归一化 token,一般用于模型的预处理,保持类似于 Bert 的统一的 token 风格,去除数据噪声。
>>> text = '张晨星[email protected],现在电子邮件可以带中文了吗?'
>>> res = jionlp.replace_email(text)
>>> print(res)
# '张晨星<url>,现在电子邮件可以带中文了吗?'
- 从该例中可知,不支持电子邮件的中文格式
-
<url>
可以用于 Bert 的统一输入。
归一化文本中的电话号码信息为一个归一化 token,一般用于模型的预处理,保持类似于 Bert 的统一的 token 风格,去除数据噪声。
>>> import jionlp as jio
>>> text = '有疑问请联系张小姐18340234920,或拨打(028)58291283。。'
>>> phones = jio.replace_phone_number(text))
# '有疑问请联系张小姐<tel>,或拨打<tel>。。'
- 默认 token 为
<tel>
。
归一化文本中的 QQ 号码信息为一个归一化 token,一般用于模型的预处理,保持类似于 Bert 的统一的 token 风格,去除数据噪声。
>>> text = '你加一下我的QQ: 123410942'
>>> res = jionlp.replace_qq(text)
>>> print(res)
# '你加一下我的QQ: <qq>'
- 该方法中提供了严格匹配 qq 字符的规则,采用
strict
(bool) 参数实现; - 默认 token 为
<qq>
。
归一化文本中的 身份证ID 号码信息为一个归一化 token,一般用于模型的预处理,保持类似于 Bert 的统一的 token 风格,去除数据噪声。
>>> text = '此人身份证号是 21040319560330098x,曾经...'
>>> res = jionlp.replace_id_card(text)
>>> print(res)
# '此人身份证号是 <id>,曾经...'
- 默认 token 为
<id>
归一化文本中的 URL 号码信息为一个归一化 token,一般用于模型的预处理,保持类似于 Bert 的统一的 token 风格,去除数据噪声。
>>> text = '让我这个手机知乎党来终结这个问题吧!http://link.ipaiban.com/#手机文字链接生成器!'
>>> res = jionlp.replace_url(text)
>>> print(res)
# '让我这个手机知乎党来终结这个问题吧!<url>#手机文字链接生成器!'
- 默认 token 为
<url>
归一化文本中的 IP 地址信息为一个归一化 token,一般用于模型的预处理,保持类似于 Bert 的统一的 token 风格,去除数据噪声。
>>> text = 'https://10.28.104.169/pdf/2004.03705.pdf'
>>> res = jionlp.replace_ip_address(text)
>>> print(res)
# 'https://<ip>/pdf/2004.03705.pdf'
- 默认 token 为
<ip>
- 一般首先删除 URL,然后删除 IP 地址。否则可能如上例造成 URL 格式错误。