讨论讨论文本分析和正则表达式

中山野鬼 发布于 2013/08/04 18:17
阅读 764
收藏 2

Linux基金会开源软件大学开源技术公开课即将上线,Kubernetes1.19实战讲解!>>>

我就不胡扯什么数据挖掘了。数据挖掘不代表只是处理字符串,数据挖掘也完全和数据分析不相同。收缩一下,就针对文本的分析的问题。这里定义下文本,

指纯文本,仅包含字符集内容的有序集合。也即不带文字表达方式的信息。诸如word之类的工具,出来的格式,主要是服务于展示,包括多种可展示的数据格式的展示,如图片,视频等,这些均不算文本。

有序,简单的理解,文本内容自身存在前后位置差异。ab 并不等于ba。

正则表达式,与其说是编程知识,不如说是数学知识。

看这么多说要搞数据挖掘的,目前看到的主要是针对文本内容,那么针对这些数据挖掘任务中,文本内容的抽象定义,定位,关联检测,(说人话吧,就是词法语法分析,)这些离不开正则表达式。

那么我想讨论的问题,先放两个出来。

1、确定的文本分析任务(你要做文字的数据挖掘肯定需要啦,回避不了的),是否有必要基于标准的正则做一个延伸扩展版本的库、包、类、模块。(不纠结你用什么面向对象,过程化语言了)

2、无论是nfa,dfa,对输入源均有消耗的概念。也即一串文字,前面已经满足的,被当作处理完毕的内容,而当前的处理针对随后的字符串。这对诸如文本扫瞄,查找,匹配,是有效的。但对语义分析是有一定不足的,这个如何处理?例如文本出现,“你的妈喊你回家吃饭”,那么不代表你的妈究竟是谁,出现过几次这个分析,仅需要在随后的文本中分析,同时也不代表,一开始的文本就一定要收集,谁是谁“他的妈”的信息,因为万一文本中压根就没这句话,怎么办呢?(吐槽一下,谁是谁“他”“妈” 被敏感了,@红薯 我是良民啊!)

关于第二点,说人话的内容如下:我们的文本分析,是否可以通过对文本的单次扫瞄,提取出所有可能的数据后,再对数据进行关联分析?如果可以,那么正则表达式可以完整的利用,如果不可以,那么正则表达式很有个可能需要对一个原始文本反复的进行不同内容的多次扫瞄。

注意第二个问题的结论直接影响了第一个问题的结论。

另外提示一下,讨论问题就讨论问题,别扯其他,诸如用java的小朋友,一句话,xx包,处理。如果xx包能处理,现在搞语义分析的专家都可以去卖x烧包了。

加载中
1
mallon
mallon

引用来自“中山野鬼”的答案

@宏哥 你的代码中,对输入的正则表达式的合法性的判断怎么处理的?
正则一般都是硬编码的,写好就固定死了,调试阶段就能发现错误
1
宏哥
宏哥

引用来自“中山野鬼”的答案

引用来自“宏哥”的答案

引用来自“中山野鬼”的答案

引用来自“Mallon”的答案

引用来自“中山野鬼”的答案

@宏哥 你的代码中,对输入的正则表达式的合法性的判断怎么处理的?
正则一般都是硬编码的,写好就固定死了,调试阶段就能发现错误
我在做个文本解析模块呢。不谈编译后动态运行外部参数,单就被其他模块引用,也是需要提供正则检测的。其实正则检测这个不难做。我是在思考,如何有效支持后面语义分析的功能。

文本分析用正则

如果想要自己嵌入自定义语言, 用lua 或者python. 

不需要自己做语法分析, 毫无意义. 

宏哥之前的代码删除了. 我用它来做页面逻辑, 能够自定义/限制 命令运行, 其实也是一种逻辑扩展和约束.

如果用lua 和python那就真是在做轮子运动了。哈。记得上半年去拜访国家情报所。他们说,啊,你们搞数据治理,有什么好工具没有,对数据和信息的分析工具?当时想想算了。老外的就别拿出来忽悠了,本身也没用过,说出口就是纯粹名词套名词。但自己手上也确实没有什么好的底层工具能提供。讲白了我是在做工具,有套别的工具的时间不如自己做个了。其实现在主要纠结的不是在怎么做出来,主要也在自己思考和抽象,功能点,看哪些该做,哪些不该做。

lua, python是胶水

不是工具

你的努力是在做胶水, 不是在做工具

听宏哥的, 不会错的.

你在胶水上浪费时间, 就没有时间做工具.

0
店长强力推荐
店长强力推荐
最后一句笑尿。
0
宏哥
宏哥

说到正则, 宏哥就以Hardcore的风格来一下:

换了一个简单的代码, 之前的代码删除了.

<?PHP
//$subject = '(aaa(b(dddd)bb)ccc)';
$subject = '(aaa(b(dddd)bb)ccc)(eeee)';
$pattern = '#\(((?>[^()]+)|(?R))*\)#m';
preg_match_all($pattern,$subject,$matches);
var_dump($matches);

0
中山野鬼
中山野鬼
@宏哥 你的代码中,对输入的正则表达式的合法性的判断怎么处理的?
0
宏哥
宏哥

引用来自“Mallon”的答案

引用来自“中山野鬼”的答案

@宏哥 你的代码中,对输入的正则表达式的合法性的判断怎么处理的?
正则一般都是硬编码的,写好就固定死了,调试阶段就能发现错误

是的. 野鬼的假定根本不存在.

不需要, 因为宏哥说的都是对的.

0
中山野鬼
中山野鬼

引用来自“Mallon”的答案

引用来自“中山野鬼”的答案

@宏哥 你的代码中,对输入的正则表达式的合法性的判断怎么处理的?
正则一般都是硬编码的,写好就固定死了,调试阶段就能发现错误
我在做个文本解析模块呢。不谈编译后动态运行外部参数,单就被其他模块引用,也是需要提供正则检测的。其实正则检测这个不难做。我是在思考,如何有效支持后面语义分析的功能。
0
宏哥
宏哥

引用来自“中山野鬼”的答案

引用来自“Mallon”的答案

引用来自“中山野鬼”的答案

@宏哥 你的代码中,对输入的正则表达式的合法性的判断怎么处理的?
正则一般都是硬编码的,写好就固定死了,调试阶段就能发现错误
我在做个文本解析模块呢。不谈编译后动态运行外部参数,单就被其他模块引用,也是需要提供正则检测的。其实正则检测这个不难做。我是在思考,如何有效支持后面语义分析的功能。

文本分析用正则

如果想要自己嵌入自定义语言, 用lua 或者python. 

不需要自己做语法分析, 毫无意义. 

宏哥之前的代码删除了. 我用它来做页面逻辑, 能够自定义/限制 命令运行, 其实也是一种逻辑扩展和约束.

0
中山野鬼
中山野鬼

引用来自“宏哥”的答案

引用来自“中山野鬼”的答案

引用来自“Mallon”的答案

引用来自“中山野鬼”的答案

@宏哥 你的代码中,对输入的正则表达式的合法性的判断怎么处理的?
正则一般都是硬编码的,写好就固定死了,调试阶段就能发现错误
我在做个文本解析模块呢。不谈编译后动态运行外部参数,单就被其他模块引用,也是需要提供正则检测的。其实正则检测这个不难做。我是在思考,如何有效支持后面语义分析的功能。

文本分析用正则

如果想要自己嵌入自定义语言, 用lua 或者python. 

不需要自己做语法分析, 毫无意义. 

宏哥之前的代码删除了. 我用它来做页面逻辑, 能够自定义/限制 命令运行, 其实也是一种逻辑扩展和约束.

如果用lua 和python那就真是在做轮子运动了。哈。记得上半年去拜访国家情报所。他们说,啊,你们搞数据治理,有什么好工具没有,对数据和信息的分析工具?当时想想算了。老外的就别拿出来忽悠了,本身也没用过,说出口就是纯粹名词套名词。但自己手上也确实没有什么好的底层工具能提供。讲白了我是在做工具,有套别的工具的时间不如自己做个了。其实现在主要纠结的不是在怎么做出来,主要也在自己思考和抽象,功能点,看哪些该做,哪些不该做。
0
中山野鬼
中山野鬼

引用来自“宏哥”的答案

引用来自“中山野鬼”的答案

引用来自“宏哥”的答案

引用来自“中山野鬼”的答案

引用来自“Mallon”的答案

引用来自“中山野鬼”的答案

@宏哥 你的代码中,对输入的正则表达式的合法性的判断怎么处理的?
正则一般都是硬编码的,写好就固定死了,调试阶段就能发现错误
我在做个文本解析模块呢。不谈编译后动态运行外部参数,单就被其他模块引用,也是需要提供正则检测的。其实正则检测这个不难做。我是在思考,如何有效支持后面语义分析的功能。

文本分析用正则

如果想要自己嵌入自定义语言, 用lua 或者python. 

不需要自己做语法分析, 毫无意义. 

宏哥之前的代码删除了. 我用它来做页面逻辑, 能够自定义/限制 命令运行, 其实也是一种逻辑扩展和约束.

如果用lua 和python那就真是在做轮子运动了。哈。记得上半年去拜访国家情报所。他们说,啊,你们搞数据治理,有什么好工具没有,对数据和信息的分析工具?当时想想算了。老外的就别拿出来忽悠了,本身也没用过,说出口就是纯粹名词套名词。但自己手上也确实没有什么好的底层工具能提供。讲白了我是在做工具,有套别的工具的时间不如自己做个了。其实现在主要纠结的不是在怎么做出来,主要也在自己思考和抽象,功能点,看哪些该做,哪些不该做。

lua, python是胶水

不是工具

你的努力是在做胶水, 不是在做工具

听宏哥的, 不会错的.

你在胶水上浪费时间, 就没有时间做工具.

两回事。再反过来说一句,做算法这么多年,基本上不用别人的算法代码,用也是当测试版本用。因为无论是别人的code,还是自己的code,最终都需要合并优化。改来改去,最后发现,还是自己写的快,因为算法原理搞清楚了,自然就出来了,算法原理搞不清楚,别人的code拿了也只能试试,更本嵌套不起来。这就如同,一个字符串,和多个字符串同时匹配的算法,用strcmp反复比较不是不能用,但这个只能做原型,最终本质还是个状态机的设计。把多个字符串先做比较构造出状态迁移的图,然后代比较字符串在这个图里跑一下就ok。说这个意思是,很多已经有的code拿过来,进行利用时,落我这个层面肯定要改造的。我外部调用python,最多做原型对比测试用。
返回顶部
顶部