jieba中的正则表达式

jieba是一个十分常见的自然语言处理包,功能包括:分词,提取关键词等等,具体看他们的官方页面,下面以jieba中的正则表达式为例子,介绍一些常见的正则公式

GitHub - fxsjy/jieba: 结巴中文分词

例子一

re_userdict = re.compile('^(.+?)([0-9]+)?([a-z]+)?$', re.U)

该正则项是jieba加载自定义函数load_userdict过滤文本使用,下面看看效果

import re
re_userdict = re.compile('^(.+?)([0-9]+)?([a-z]+)?$', re.U)
line = "新灌病毒 是 8 nz"
word, freq, tag = re_userdict.match(line).groups()

结果:

word = '新灌病毒 是'

freq = '8'

tag = 'nz'

解释:^是字符串的开头,

(.+?)其中.是任意符号,除了换行符;+是匹配1个或多个表达式;?是匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式;()是分组;

所以^(.+?)是第一个分组,匹配的是任意符号

([0-9]+)?是第二个分组匹配,只匹配数字,在这个例子中就是词频

([a-z]+)?是第三个分组,只匹配字母,在这个例子就是词性

$是字符串的结尾。

例子二

re_han_default = re.compile("([\u4E00-\u9FD5a-zA-Z0-9+#&\._%\-]+)", re.U)
该表达式是jieba用于默认分词jieba.cut第一步文本拆分的表达式

import re
re_han_default = re.compile("([\u4E00-\u9FD5a-zA-Z0-9+#&\._%\-]+)", re.U)
line  = "dsa@#$正则表达式 dsd"
re_han_default.split(line)

结果:

['', 'dsa', '@', '#', '$', '正则表达式', ' ', 'dsd', '']

解释:\u4E00-\u9FD5是unicode中文编码,a-zA-Z是英文,0-9是数字,然后是几个符号+#等,其中\.就代表符号.,[]+表示匹配1个或多个的表达式。

所以split函数完成的就是对任意文本按照上述汉字/数字/英文/这些符号以外的进行拆分,@不符合条件所以将dsa和#符号拆开,$也不符合条件,所以将#和"正则表达式"拆开,然后是空格,最后是dsd

例子三

re_skip = re.compile("(\r\n|\s)", re.U)
该表达式是用于剔除文本中的空格

import re
re_skip = re.compile("(\r\n|\s)", re.U)
line  = "dsa@#$正则表达式 dsd"
re_skip.split(line)

结果:
['dsa@#$正则表达式', ' ', 'dsd']

解释:\r是回车符,\n是换行符,\s是空格,所以re_skip就代表任意非空字符,spli函数完成按照任意非空字符进行拆分

例子四

re_skip_detail = re.compile("([\.0-9]+|[a-zA-Z0-9]+)")

用于匹配字母数字组合和数字

import re
re_skip_detail = re.compile("([\.0-9]+|[a-zA-Z0-9]+)")
line  = "1.1 DSA 12DSA da12"
re_skip_detail.split(line)

结果:

['', '1.1', ' ', 'DSA', ' ', '12', '', 'DSA', ' ', 'da12', '']

解释:[\.0-9]+是匹配1个或多个数字、.数字,[a-zA-Z0-9]+是匹配1个或多个字母数字组合,|符号是或,1.1和12符合[\.0-9]+,DSA 和da12符合[a-zA-Z0-9]+

例子五

re_eng1=re.compile('^[a-zA-Z0-9]$', re.U)

用于匹配单个字母或者数字

import re
re_eng1=re.compile('^[a-zA-Z0-9]$', re.U)
line  = "s"
re_eng1.match(line)
re_eng1.match("ss")

结果:
第一个公式返回:<re.Match object; span=(0, 1), match='s'>

第二个公式啥也不返回

解释:^匹配字符串的开头,$匹配字符串的结尾,[a-zA-Z0-9]表示匹配任意一组小写字母或者大写字母或者数字,合起来就是从字符串头到尾只匹配一个字母或数字;这个正则表达式和前面的不同就是没有+,如果类似[a-zA-Z0-9]+,就可以匹配一串字母数字组合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eva_Hua

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值