用于检测和删除重复段落的正则表达式

时间:2017-10-03 13:33:50

标签: php regex

我正在运行一个人们改善/验证一分钟音频记录转录的平台。

有些用户复制&将转录粘贴一次或多次到文本区域然后发送给我们。这是一种垃圾邮件。

我正在使用正则表达式,允许我检测并删除重复的文本。我现在就是这样:

正则表达式适用于2/4个案例。

这是:

preg_replace("#(^.*$)((?:.+^\1$)+)#ms", "$1", $Transcription)

这是案例:

案例1:原始转录只加1次重复

//Transcription with only 1 repetition
$Transcription = "[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-
[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-";

该功能正常:

$Transcription = preg_replace("#(^.*$)((?:.+^\1$)+)#ms", "$1", $Transcription);

结果:

print $Transcription;

在此处查看: https://regex101.com/r/yibyuT/5

案例2:原始转录加2次重复

//Transcription with 2 repetitions
$Transcription = "[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-
[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-
[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-...",

应用的功能:

$Transcription = preg_replace("#(^.*$)((?:.+^\1$)+)#ms", "$1", $Transcription);

结果还可以:

print $Transcription;

在此处查看: https://regex101.com/r/yibyuT/6

案例3:原始转录加3次重复

//Transcription plus 3 repetitions
$Transcription = "[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-
[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-
[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-
[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-",

应用的功能:

$Transcription = preg_replace("#(^.*$)((?:.+^\1$)+)#ms", "$1", $Transcription);

结果显示原始转录加1次重复,所以不行:

print $Transcription;

案例4原始转录加N次迭代以及每次和/或开头和/或结尾之间的一些文字

//Original transcription with 1 repetition and some text here and there
$Transcription = "some text here."./*Here start the original prhase*/."[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-"./*Here ends the original phrase*/."."./*Yes, a dot. Only a dot as 'some text between the repetitions'*/.""./*Here start the first repetition. Please note the vertical white space at the beginning*/.
[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-/*Here ends the first repetition.*/
fddjkdfjk djk fdjkf djk fdjk fjkdfj kdjfkdj fjdkf jdjf d


/*some text at the end. Please note the several vertical white space at the end*/";

应用的功能:

$Transcription = preg_replace("#(^.*$)((?:.+^\1$)+)#ms", "$1", $Transcription);

结果显示原始转录加上一些未经过重复修改的文本,所以它也不行:

print $Transcription;

我只需要一个函数用于所有情况(只有一次重复或两次或多次重复),包括不会被检测到或删除的转录中不重复的单词或短语的可能性。

1 个答案:

答案 0 :(得分:0)

我认为这是一个有趣的问题,让我思考一下,但我认为我找到了你的解决方案。

代码

<强>正则表达式

See regex in use here

<div class="dropdown">
	<button onclick="myFunction()" class="dropbtn">Add Equipment</button>
	<div class="dropdown-content">
		<a href="#">Link 1</a>
		<a href="#">Link 2</a>
		<a href="#">Link 3</a>
	</div>
</div>

<div class="dropdown">
	<button onclick="myFunction()" class="dropbtn">Deployed Equipments</button>
	<div class="dropdown-content">
		<a href="#">Link 1</a>
		<a href="#">Link 2</a>
		<a href="#">Link 3</a>
	</div>
</div>

注意:对于不使用PCRE正则表达式的语言,您必须将上述正则表达式中的(^.*$)((?:\v+^\1$)+) 替换为\v

替换(无)

结果

输入

[\r\n]

输出

[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-
[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-
[00:00:02] Hola, buenos días.
[00:00:03] Hola buenos días ¿Leo?
[00:00:07] Sí, sí, yo soy.
[00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana?
[00:00:34] Er... Er... Por la tarde si quiere.
[00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis?
[00:00:43] No, espera, es una tienda.
[00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...?
[00:00:53] [SUPERPUESTO 00:00:53].
[00:00:53] A las cinco... A las cinco.
[00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo.
[00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía?
[00:01:03] Er... Somos Secu-

说明

  • [00:00:02] Hola, buenos días. [00:00:03] Hola buenos días ¿Leo? [00:00:07] Sí, sí, yo soy. [00:00:07] Encantada de... De saludarle Leo. Mi nombre es y le llamo de. El motivo de mi llamada, Leo, es porque tenemos a nuestro técnicos especialistas en seguridad en su zona, ya que estamos actualizando la seguridad, porque hemos recibido pues varias solicitudes y llamadas de información por parte de vecinos, y simplemente era saber cuándo tendría diez minutitos para poder recibir usted la información ¿Cuándo le vendría mejor, Leo, está tarde o mañana? [00:00:34] Er... Er... Por la tarde si quiere. [00:00:37] Por la tarde, vale ¿Y cuál es el mejor horario...? ¿Las cinco, las seis? [00:00:43] No, espera, es una tienda. [00:00:46] Es una tienda, vale, entonces, un poquito por ser... ¿Cuánto me-. ¿Cuándo tiene menos trabajo normalmente a primera hora a las cinco, a las siete y media o a las ocho...? [00:00:53] [SUPERPUESTO 00:00:53]. [00:00:53] A las cinco... A las cinco. [00:00:56] ¿A las cinco? Vale, pues dime la dirección de la tienda Leo. [00:01:00] Er... ¿Qué co-...? ¿Qué nombre es la compañía? [00:01:03] Er... Somos Secu- 将以下内容捕获到第一个捕获组中
    • (^.*$)在行首处断言位置
    • ^任意次匹配任何字符(使用.*修饰符,这也会捕获新行)
    • s断言行尾的位置
  • $将以下内容捕获到第二个捕获组中
    • ((?:\v+^\1$)+)匹配以下一次或多次
      • (?: ... )+匹配一个或多个垂直空格(包括垂直制表符,换行符等) - 对于非PCRE正则表达式,请使用\v+代替
      • [\r\n]在行首处断言位置
      • ^反向引用捕获组1
      • \1断言行尾的位置
相关问题