javascript 标记字符串以清理文本

javascript tokenizing strings to cleanup text

我在尝试清理一些文本时遇到了一些麻烦。我收到一个输入文本,我想删除所有非单个 space 白色 space 字符,删除句点、逗号等,但不要像这样拆分单词:

Ph.D。 老师的

基本上我不想删除不改变单词含义的标点符号,感叹号,问号之类的可以去掉。

我写了一些 js 正则表达式,但我觉得它很乱。有什么清理建议吗?

var cleaned_plaintext = input_text;

cleaned_plaintext = cleaned_plaintext.toLowerCase();
cleaned_plaintext = cleaned_plaintext.replace(/^\s+/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/[,:()]/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/\|\s+/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/\s\-+\s/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/\s{2,}/mg,"");
cleaned_plaintext = cleaned_plaintext.replace(/\.\s+/mg, " ");
cleaned_plaintext = cleaned_plaintext.replace(/\?/mg, "");
cleaned_plaintext = cleaned_plaintext.replace(/([=11=]\r\n|\n|\r|[=11=])/gm," ");
cleaned_plaintext = cleaned_plaintext.replace(/\./mg, "");
cleaned_plaintext = cleaned_plaintext.replace(/[©]\s+/mg, "");
cleaned_plaintext = cleaned_plaintext.replace(/[.,?!:;()–?|$©”“|…]/gm,"");

有很多正则表达式,我觉得可以清理很多。我只是不确定如何。我知道这被标记为 javascript 但如果有另一种语言有更好的工具,我也愿意使用它。

我想你可以将一些正则表达式组合在一起。

你有这两个正则表达式:

/^\s+/mg
/\s{2,}/mg

相当于:

/\s{2,}|^\s/mg

这个正则表达式:

/\s\-+\s/mg

可以写成:

/\s-+\s/mg

我不确定这一切是怎么回事:

/[©]\s+/mg
/\|\s+/mg
/[,:()]/mg
/\?/mg
/\./mg
/[.,?!:;()–?|$©”“|…]/gm

您至少要删除所有内容两次

请注意 )–? 包括这些字符:

)*+,-./0123456789:;<=>?

您可以摆脱其中的大部分,并将您的一个正则表达式更改为:

/[!(–?$”“…]/mg

要处理要删除可选尾随 space 的 2 个符号,您可以使用:

/[©|]\s?/mg

您使用这两个正则表达式查找要替换为 space:

的内容
/\.\s+/mg
/([=17=]\r\n|\n|\r|[=17=])/gm

你可以合并它们,并删除一些不需要的东西:

/\.\s+|\n|\r|[=18=]/mg

运行 这些新正则表达式的最佳顺序:

/\.\s+|\n|\r|[=19=]/mg  //remember replace with space!
/\s-+\s/mg
/[©|]\s?/mg
/[!(–?$”“…]/mg
/\s{2,}|^\s/mg

您也可以将函数链接在一起,例如:.replace(...).replace(...).replace(...)。您可以决定这是否是个好主意。