正则表达式和文本挖掘(Text Mining)
在进行文本挖掘时,TSQL中的通配符(Wildchar)显得功能不足,这时,使用“CLR+正则表达式”是非常不错的选择,正则表达式看似非常复杂,但,万变不离其宗,熟练掌握正则表达式的元数据,就能熟练和灵活使用正则表达式完成复杂的Text Mining工作。
一,正则表达式的特殊字符
1,常用元字符
用以匹配特定的字符(字母,数字,符号),注意字母是区分大小写的:
- . :匹配除换行符以外的任意字符
- \w :匹配字母或数字或下划线或汉字
- \s :匹配任意的空白符
- \d :匹配数字
- \b :匹配单词的开始或结束
- ^ :匹配字符串的开始
- $ :匹配字符串的结束
- \k :引用分组名,例如:\k<group_name>,表示引用名字为group_name的分组
- \group_number:group_number是分组的组号,1,2,3等,表示通过组号引用分组
2,重复字符或分组
指定前面一个字符或分组重复的次数:
- * :重复零次或更多次
- + :重复一次或更多次
- ? :重复零次或一次
- {n} :重复n次
- {n,} :重复n次或更多次
- {n,m} :重复n到m次
3,分组,转义,分支,限定符
这些字符有特定的含义和用途:
- () : 用小括号表示一个分组
- <>: 定义分组名< 和 > 之间的字符串是分组名
- \ : 转义字符,将特殊字符转移为普通字符,例如:\(,表示小括号“(”,小括号不再作为特殊字符
- | : 分支,表达式之间是“或”的关系
- [] : 指定限定字符列表,一个字符必须匹配列表中任意一个字符,在中括号中指定匹配的字符列表,例如:[aeiou] 一个字符必须aeiou中的任意一个;
- [^ ] : 指定排除字符列表,一个字符不能是排除列表中的任意一个字符,中括号中指定排除的字符列表,例如:[^aeiou] 一个字符不能是aeiou中的任意一个;
二,分组引用
分组,是使用小括号指定的一个子表达式;分组引用,是指在表达式中,重复使用子表达式,使正则表达式的写法更简洁。默认情况下,正则表达式为每个分组自动分配一个组号,规则是:组号从1开始,从左向右,组号依次加1(base-1),例如,第一个分组的组号为1,第二个分组的组号为2,以此类推。
分组定义的三种形式:
- (exp) :自动分配组号,通过分组号引用该分组;
- (?<name>exp) :命名分组,通过分组名引用该分组;
- (?:exp) :该分组只在当前位置匹配文本,在该分组之后,无法引用该分组,该分组没有分组名,也没有分组号;
1,通过组号引用分组
在正则表达式前面定义一个分组(exp),在表达式的后面,能够通过组号引用该分组的表达式,引用分组的语法是:\group_number;
例如:\b(\w+)\b\s+\1\b,在该正则表达式中,只存在一个分组(\w+),组号是1,在该分组的后面,使用\1来引用该分组,将\1替换为分组的子表达式,等价于:\b(\w+)\b\s+(\w+)\b。
2,通过分组名引用分组
在正则表达式中,能够对分组命名,命名的分组格式:(?<name>exp),分组名是name,通过name来引用该分组的格式是:\k<group_name>,通过分组名和组号引用分组,其文本匹配的行为是一样的。
例如:\b(?<word>\w+)\b\s+\1\b,在该分组的后面中,使用\k<word>引用该分组,将\k<word>替换为分组的子表达式,等价于:\b(\w+)\b\s+(\w+)\b。
3,无法引用的分组
(?:exp):使用这种语法定义的分组,不能引用,只能在当前的位置匹配文本,正则表达式不为该分组自动分配组号。
三,断言查找
断言是一个逻辑表达式,只有当表达式为真时,匹配成功。当匹配成功时,返回文本,返回的文本不包含前缀或后缀,即,断言用于查找在特定“文本”之前或之后的文本。断言的四种语法:
- (?=exp):文本的后面匹配表达式exp,返回exp位置之前的表达式
- (?<=exp) :文本的前面匹配表达式exp,返回exp位置之后的表达式
- (?!exp):文本的后缀不是exp,返回后缀不是exp的表达式
- (?<!exp):文本的前缀不是exp,返回前缀不是exp的表达式
1,后缀匹配
(?=exp):文本的后面匹配表达式exp,返回exp位置之前的表达式。后缀匹配,和TSQL的 "%ing"类似;
比如正则表达式:\b\w+(?=ing\b)
分析:断言其后缀是ing,并且是单词的结尾(\b),匹配以ing结尾的单词,但返回单词的前面部分,ing之前的部分;
例如,查找“I'm reading a book”,它会匹配“reading”,因为该字符后面以ing结尾,该正则表达式返回read,断言返回的文本不包含后缀。
2,前缀匹配
(?<=exp):文本的前面匹配表达式exp,返回exp位置之后的表达式。前缀匹配,和TSQL的 "re%"类似;
比如正则表达式:(?<=\bre)\w+\b
分析:单词的打头(\b),并且单词的前缀是re,匹配以re开头的单词,返回单词的后半部分,re之后的部分;
例如,查找“I am reading a book”,它会匹配“reading”,因为该字符前面以re打头,该正则表达式返回ading,断言返回的文本不包含前缀。
3,查找前缀或后缀不是特定文本的文本
这两个断言查找,跟前面两个相反,作用不大,简单了解一下:
- (?!exp) :文本的后缀不是exp,返回后缀不是exp的表达式
- (?<!exp) :文本的前缀不是exp,返回前缀不是exp的表达式
3.1 比如,正则表达式:\b\w+(?!ing\b)
分析:不匹配以ing结尾的单词,查找“I am reading a book”,返回的文本:I,am,a,book
3.2 比如,正则表达式:(?<!\bre)\w+\b
分析:不匹配以re打头的单词,查找“I am reading a book”,返回的文本:I,am,a,book
附:JS正则表达式在线测试:Regex Pal
推荐阅读:
正则表达式和文本挖掘(Text Mining)的更多相关文章
- coursera 公开课 文本挖掘和分析(text mining and analytics) week 1 笔记
一.课程简介: text mining and analytics 是一门在coursera上的公开课,由美国伊利诺伊大学香槟分校(UIUC)计算机系教授 chengxiang zhai 讲授,公开课 ...
- 【337】Text Mining Using Twitter Streaming API and Python
Reference: An Introduction to Text Mining using Twitter Streaming API and Python Reference: How to R ...
- (Deep) Neural Networks (Deep Learning) , NLP and Text Mining
(Deep) Neural Networks (Deep Learning) , NLP and Text Mining 最近翻了一下关于Deep Learning 或者 普通的Neural Netw ...
- An Introduction to Text Mining using Twitter Streaming
Text mining is the application of natural language processing techniques and analytical methods to t ...
- 5.9-3 用正则表达式判断字符串text是否为合法的手机号
package zfc; public class Zfc { public static void main(String[] args) { //判断手机号格式是否合法 String text = ...
- Unsupervised Learning and Text Mining of Emotion Terms Using R
Unsupervised learning refers to data science approaches that involve learning without a prior knowle ...
- Text Mining and Analytics WEEK1
第一周目标 解释自然语言处理中的一些基本概念 解释不同的方式来表示文本数据 解释的两种基本的词联想以及如何从文本数据挖掘聚合关系 尝试回答以下问题 为了理解一个自然语言句子,计算机必须做些什么? 什么 ...
- 曼孚科技:AI自然语言处理(NLP)领域常用的16个术语
自然语言处理(NLP)是人工智能领域一个十分重要的研究方向.NLP研究的是实现人与计算机之间用自然语言进行有效沟通的各种理论与方法. 本文整理了NLP领域常用的16个术语,希望可以帮助大家更好地理解 ...
- 重磅︱文本挖掘深度学习之word2vec的R语言实现
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:2013年末,Google发布的 w ...
随机推荐
- mobx @computed的解读
写在前面:我一开始看不懂官网的@computed的作用,因为即使我把@computed去掉,依然能正确的report,然后我百度谷歌都找不到答案,下面都是我自己的理解,如果是有问题的,不对的,请务必留 ...
- 【java】Naming.bind和Registry.bind区别
Naming类和Registry类均在java.rmi包 Naming类通过解析URI绑定远程对象,将URI拆分成主机.端口和远程对象名称,使用的仍是Registry类. public static ...
- webapi - 模型验证
本次要和大家分享的是webapi的模型验证,讲解的内容可能不单单是做验证,但都是围绕模型来说明的:首先来吐槽下,今天下午老板为自己买了套新办公家具,看起来挺好说明老板有钱,不好的是我们干技术的又成了搬 ...
- Chrome V8引擎系列随笔 (1):Math.Random()函数概览
先让大家来看一幅图,这幅图是V8引擎4.7版本和4.9版本Math.Random()函数的值的分布图,我可以这么理解 .从下图中,也许你会认为这是个二维码?其实这幅图告诉我们一个道理,第二张图的点的分 ...
- .NET Core 2016 回顾
都在回顾自己的2016,今天我们来看看.NET Core的2016. 每一年的脚步的确是快,转眼间马上就2017.新的一年,带着理想和抱负继续出发. 1 月 ASP.NET 5 改名 ASP.NET ...
- Linux下用netstat查看网络状态、端口状态(转)
转:http://blog.csdn.net/guodongdongnumber1/article/details/11383019 在linux一般使用netstat 来查看系统端口使用情况步. ...
- 【python之路5】学习小结
一.编程语言 java C语言 C++ C# Python 二.python语言的种类 Cpython:python的官方版本,使用最为广泛,实现将python(py文件)转换为字节码文件(pyc文件 ...
- ASP.NET Aries 3.0发布(附带通用API设计及基本教程介绍)
主要更新: 1:升级处理机制(js请求由同步变更为异步) 2:优化前端JS:包括API和配置方式. 3:增加InputDialog功能. 4:增远远程验证功能. 5:优化权限安全机制. 6:增加一次请 ...
- .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序
在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...
- Ubuntu14.04配置Mono+Jexus
总所周知,ASP.NET是微软公司的一项技术,是一个网站服务端开发的一种技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们,就是所谓动态网站开发,它依赖运行于 IIS 之中的程序 .但 ...