首页 > 解决方案 > 从字符串中删除标点符号,期望在 Pig 拉丁语脚本中使用撇号

问题描述

我想对单词文件执行字数统计并删除带有撇号的字符串的标点符号。我尝试执行以下代码,但它给出了一个意外的错误“”。

    word_file = LOAD '/user/username/text.txt' USING TextLoader AS(line:CHARARRAY);                                                                                                                                                                                                                                                                                                                                                         
    stop_file = LOAD '/user/username/stop_words.txt' USING TextLoader AS(stop:CHARARRAY);
    words = FOREACH word_file GENERATE FLATTEN(TOKENIZE(REPLACE(LOWER(TRIM(line)) ,'([\w\d'\s]+)', ''))) AS word;                                                                                                                                                                                                                                                                                                                                        

谁能帮我解决这个问题?

标签: apache-pigword-count

解决方案


http://pig.apache.org/docs/r0.17.0/func.html#replace states

如果要替换字符串文字中的特殊字符,例如“[”,则必须在“regExp”中通过在它们前面加上双反斜杠(例如“\[”)来对它们进行转义。

所以如果你想排除任何带引号的字符串,我会做

word_file = LOAD 'input.txt' USING TextLoader AS(line:CHARARRAY);
words = FOREACH word_file GENERATE 
          FLATTEN(
            TOKENIZE(
              REPLACE(LOWER(TRIM(line)),'(\\\'[\\w\\d\\s]+\\\')', ''))) AS word;
STORE words into '...';

推荐阅读