文本挖掘 R 包和正则表达式来处理替换智能卷曲引号

amr*_*rrs 5 regex r text-mining

我有一堆像下面这样的文本,带有不同的智能引号 - 用于单引号和双引号。我所知道的软件包最终所能得到的就是删除这些字符,但我希望将它们替换为正常的引号。

\n\n
textclean::replace_non_ascii("You don\xe2\x80\x98t get \xe2\x80\x9cyour\xe2\x80\x9d money\xe2\x80\x99s worth")\n
Run Code Online (Sandbox Code Playgroud)\n\n

收到的输出:"You dont get your moneys worth"

\n\n

预期输出:"You don\'t get "your" money\'s worth"

\n\n

如果有人有正则表达式来一次替换所有这样的引号,我也将不胜感激。

\n\n

谢谢!

\n

Wik*_*żew 5

使用两个gsub操作:1)替换双大引号,2)替换单引号:

\n\n
> gsub("[\xe2\x80\x9c\xe2\x80\x9d]", "\\"", gsub("[\xe2\x80\x98\xe2\x80\x99]", "\'", text))\n[1] "You don\'t get \\"your\\" money\'s worth"\n
Run Code Online (Sandbox Code Playgroud)\n\n

请参阅在线 R 演示。在 Linux 和 Windows 上都进行了测试,并且工作原理相同。

\n\n

[\xe2\x80\x9c\xe2\x80\x9d]构造是一个正字符类,与类中定义的任何单个字符相匹配。

\n\n

要规范化所有类似于双引号的字符,您可能需要使用

\n\n
> sngl_quot_rx = "[\xca\xbb\xca\xbc\xca\xbd\xd9\xac\xe2\x80\x98\xe2\x80\x99\xe2\x80\x9a\xe2\x80\x9b\xd5\x9a\xef\xb8\x90]"\n> dbl_quot_rx = "[\xc2\xab\xc2\xbb\xe2\x80\x9c\xe2\x80\x9c\xe2\x80\x9d\xe2\x80\x9e\xe2\x80\x9f\xe2\x89\xaa\xe2\x89\xab\xe3\x80\x8a\xe3\x80\x8b\xe3\x80\x9d\xe3\x80\x9e\xe3\x80\x9f\\\xef\xbc\x82\xe2\x80\xb3\xe2\x80\xb6]"\n> res = gsub(dbl_quot_rx, "\\"", gsub(sngl_quot_rx, "\'", `Encoding<-`(text, "UTF8"))) \n> cat(res, sep="\\n")\nYou don\'t get "your" money\'s worth\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里,[\xc2\xab\xc2\xbb\xe2\x80\x9c\xe2\x80\x9c\xe2\x80\x9d\xe2\x80\x9e\xe2\x80\x9f\xe2\x89\xaa\xe2\x89\xab\xe3\x80\x8a\xe3\x80\x8b\xe3\x80\x9d\xe3\x80\x9e\xe3\x80\x9f\xef\xbc\x82\xe2\x80\xb3\xe2\x80\xb6]匹配

\n\n
\xc2\xab   00AB  LEFT-POINTING DOUBLE ANGLE QUOTATION MARK\n\xc2\xbb   00BB  RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK\n\xe2\x80\x9c   05F4  HEBREW PUNCTUATION GERSHAYIM\n\xe2\x80\x9c   201C  LEFT DOUBLE QUOTATION MARK\n\xe2\x80\x9d   201D  RIGHT DOUBLE QUOTATION MARK\n\xe2\x80\x9e   201E  DOUBLE LOW-9 QUOTATION MARK\n\xe2\x80\x9f   201F  DOUBLE HIGH-REVERSED-9 QUOTATION MARK\n\xe2\x89\xaa  226A  MUCH LESS-THAN\n\xe2\x89\xab  226B  MUCH GREATER-THAN\n\xe3\x80\x8a  300A  LEFT DOUBLE ANGLE BRACKET\n\xe3\x80\x8b  300B  RIGHT DOUBLE ANGLE BRACKET\n\xe3\x80\x9d  301D  REVERSED DOUBLE PRIME QUOTATION MARK\n\xe3\x80\x9e  301E  DOUBLE PRIME QUOTATION MARK\n\xe3\x80\x9f  301F  LOW DOUBLE PRIME QUOTATION MARK\n\xef\xbc\x82  FF02  FULLWIDTH QUOTATION MARK\n\xe2\x80\xb3   2033  DOUBLE PRIME\n\xe2\x80\xb6   2036  REVERSED DOUBLE PRIME\n
Run Code Online (Sandbox Code Playgroud)\n\n

用于[\xca\xbb\xca\xbc\xca\xbd\xd9\xac\xe2\x80\x98\xe2\x80\x99\xe2\x80\x9a\xe2\x80\x9b\xd5\x9a\xef\xb8\x90]规范化一些类似于单引号的字符:

\n\n
\xca\xbb  02BB  MODIFIER LETTER TURNED COMMA\n\xca\xbc  02BC  MODIFIER LETTER APOSTROPHE\n\xca\xbd  02BD  MODIFIER LETTER REVERSED COMMA\n\xd9\xac  066C  ARABIC THOUSANDS SEPARATOR\n\xe2\x80\x98  2018  LEFT SINGLE QUOTATION MARK\n\xe2\x80\x99  2019  RIGHT SINGLE QUOTATION MARK\n\xe2\x80\x9a  201A  SINGLE LOW-9 QUOTATION MARK\n\xe2\x80\x9b  201B  SINGLE HIGH-REVERSED-9 QUOTATION MARK\n\xd5\x9a   055A  ARMENIAN APOSTROPHE\n\xef\xb8\x90  FE10  PRESENTATION FORM FOR VERTICAL COMMA\n
Run Code Online (Sandbox Code Playgroud)\n