RegEx_based_convertor:一种基于正则表达式原理做的句子同义转换算法

代码地址:https://github.com/TianhaoFu/RegEx_based_convertor

RegEx_based_convertor

句子的同义转换是一个很常见的NLP任务,现在很多人用机器学习的方法来做此任务。有时候结合其他方法来做同义转换能够非常有效的帮助你提高算法的某些性能或者对你的算法有启发,所以这里有一种将规则表示为正则表达式的形式来实现句子的同义转换的方法,希望对做相关问题的你有所帮助或启发~

0 简介

基于正则表达式句子同义转换器用于完成paraphasing任务,可实现以下功能:

1)给定数据集,可从数据集中提取句子转换的规则。

数据集的基本组成单元为一对相同意思的question。

如: emmm. how do I learn to play the guitar ? it’s so diffcult <-> what is the best way to learn to play the guitar ?

规则用正则表达式的形式进行表达

如: [,.?]how\sdo\si\s(.+)[,.?] <-> what is the best way to $@_0

2)可将提取的规则应用于新句子中,转换为同义不同的形式。

1 句子同义转换器实现机制

核心思想为将转换规则表示成正则表达式对的形式,利用正则表达式的特点实现同义转换。

具体来说,设正则表达式对分别为P1和P2。问题转换前为Q1,问题转换后为Q2。

首先利用P1从Q1中提取到一些关键字,如名词,形容词等。设提取到的关键字集合为K,通过将K嵌入到P2中得到Q2从而完成问题转换的思路。

这里举一个例子:

Q1: emmm. how do I learn to play the guitar ? it’s so diffcult

Q2: what is the best way to learn to play the guitar ?

K: {“learn to play the guitar” }

P1: [,.?]how\sdo\si\s(.+)[,.?]

P2: what is the best way to $@_0

流程:P1首先利用 (.+) 从Q1中提取到关键字 learn to play the guitar ,并利用[,.?] 将Q1中与主干无关的部分emmm. it’s so diffcult 去掉,之后将提取到的关键字嵌入到P2(替换P2中的$@_0)中便得到Q2。

2 问题转换器学习思路(规则学习思路)

核心思想为通过字符串及正则表达式的规则进行学习。

1)P1的生成:

P1初始时为空字符串。之后首先从Q1的第一个单词开始,循环搜索Q2中是否有同样的单词,若有则在正则表达式P1尾部加一个能够匹配关键字的项“(.+)”,若没有则将该单词原样加入到正则表达式P1尾部中。循环搜索结束后,在P1首尾分别加入[,.?],最终得到的字符串即为P1.

2)P2的生成:

P2初始时与Q2相同。首先从Q1的第一个单词开始,循环搜索Q2中是否有同样的单词,若有则将Q2(P2)中相同的单词替换为$@_i,最终改变后的Q2(P2)即为P2.

3 文件目录:

->quora.zip :quora公开句子同义转换数据集

->rule_generater.py :训练问题转换器(规则生成)

->rule_filter_test.txt : 规则文件

->rule_test.py :对生成的的规则进行测试

如果你觉得对你有用,请在你的代码或者论文中注明一下我的工作,如果能再给我点个star就更好啦!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Regex Testor Version 1.02 Copyright (c) 2013 Fiery Red - flameleo 我们在使用正则表达式( regex: regular expression )的过程中,经常发现正则表达式语法很令人头疼,即使对经常使用它的人来说也是如此。对于刚接触正则表达式的人来说多练习,多使用,才能熟练掌握正则表达式。 由于难于读写,容易出错,且需要反复练习。所以找一种工具对正则表达式对我们脑中构思的regex进行测试是很有必要的。 1.特点 a.适合初学者,在不断测试用学习如何使用正则表达式。 b.可以分组保存,测试中用到的正则表达式。 c.本工具使用最常见的regex。以下是简单示例: a|b Matches a or b gr(a|e)y Matches a or e . Matches any single character [abc] Matches a single character a, b or c [^abc] Matches any single character except a, b or c [a-z] Matches a single charactor in the range a to z [a-zA-Z] Matches a single charactor in the range a to z or A to Z ^ Matches the start of the filename $ Matches the end of the filename * Matches the preceding element zero or more times ? Matches the preceding element zero or one times + Matches the preceding element one or more times {x} Matches the preceding element x times {x,} Matches the preceding element x or more times {x,y} Matches the preceding element between x and y times 值得一提的是()代表子匹配,有些环境中gr(a|e)y Matches gray or grey 还支持许多常见的转义字符 \b,\B,\c,\d,\D,\f,\n,\r,\s,\S,\t,\v,\w,\W,\x,\u 具体详见附件 Regular Expression Syntax1.html 2.功能介绍 a.界面上显示提供regex输入框和原文本框,点击[模式匹配]按钮后,会在右侧输出结果,包括匹配字符串列表和文本。 b.对于测试中一些有用的regex,点击[insert]按钮添加到模式列表,以备日后使用。你可以位该regex添加描述分组,该信息会在程序结束后保存在CustomPatternInfo.ini文件中。 c.可以参考Readme_1.jpq和Readme_2.jpq图片介绍。 3.有待改进 a.界面布局和控件友好型和交互性。 b.界面功能提供regex语法支持。(暂时可以通过导入附件RegexSystax.ini到CustomPatternInfo.ini中) 4.意见反馈 a.请将您的宝贵意见反馈到 FieryRed_2012@163.com 附件: Readme.txt Readme_1.jpg Readme_2.jpg Regular Expression Syntax.html RegexSystax.ini
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值