打开一个JavaScript正则expression式的Sed函数
我在bash
有这个文本规范化函数
normalize_text() { tr '[:upper:]' '[:lower:]' | sed -e 's/^/__label__/g' | \ sed -e "s/'/ ' /g" -e 's/"//g' -e 's/\./ \. /g' -e 's/<br \/>/ /g' \ -e 's/,/ , /g' -e 's/(/ ( /g' -e 's/)/ ) /g' -e 's/\!/ \! /g' \ -e 's/\?/ \? /g' -e 's/\;/ /g' -e 's/\:/ /g' | tr -s " " }
我必须将其转换为JavaScript RegExp
。
这是我的部分实施
text=text.toLowerCase(); text=text.replace(/(?:\\[rn]|[\r\n]+)+/g, " "); text=text.replace(/'/g, " ' "); text=text.replace(/"/g, ''); text=text.replace(/\./g, ' \. '); text=text.replace(/,/g, ' \, '); text=text.replace(/\(/g, ' ( '); text=text.replace(/\)/g, ' ) '); text=text.replace(/!/g, ' ! '); text=text.replace(/\?/g, ' ! '); text=text.replace(/;/g, ' '); text=text.replace(/:/g, ' '); text=text.replace(/\t+/g,'\t').replace(/\t\s/g,' ').replace(/\t/g,' ');
尽pipe这个实现,当我使用JavaScript版本来生成文件(使用FastCSV节点库),它会创build一个错误的CSV,导致parsing错误时,阅读
Error: Parse Error: expected: '"' got: 'i'. at 'i met her
当使用sed
对文件进行规范化处理,然后使用FastCSV
进行读取时,它将正常工作。
我认为你可以尝试下面的代码。 演示在这里 。
text = text.replace(/^/gm, '__label__'); text = text.replace(/"/g, ''); text = text.replace(/<br \/>/g, ' '); text = text.replace(/([()!?.',])/g, ' $1 '); text = text.replace(/[;:]/g, ' '); text = text.replace(/ +/g, ' ');
说明:
- sed-s
's/^/__label__/'
'__label__'
添加到每一行的开头。 在js中你需要多行修饰符,/m
。 - 消除引号很容易从sed翻译成js:
-e 's/"//g'
变成text = text.replace(/"/g, '');
- 换行到空格基本上是一样的:
-e 's/<br \/>/ /g'
变为text = text.replace(/<br \/>/g, ' ');
。 - 您在几个字符周围添加空格。 我把它们放在一个单独的replace中:
text = text.replace(/([()!?.',])/g, ' $1 ');
。- 您可以在字符类中指定多个字符:
[...]
。 如果在括号内提到,它将匹配1个字符。 虽然有^
和-
字符有一些技巧 – 你可以在这里查看它们。 - 这个字符类在一个捕获组中:
(...)
所以我们可以在replace中用$1
来引用它。
- 您可以在字符类中指定多个字符:
- 你想用一个空格replace一些字符。 我把它们放在一起就像这样:
text = text.replace(/[;:]/g, ' ');
。 - 我不熟悉
tr
命令。 我相信在这种情况下,它会用一个replace多个空格。 你可以用这样的正则expression式来实现:text = text.replace(/ +/g, ' ');
。