SAS: регулярное выражение для символов слова на любом языке - PullRequest
1 голос
/ 22 октября 2019

Предположим, у вас есть данные в твиттере.

Например, есть следующий твит:

RT @Mydy_Rabycad: (английский в комментариях) ТРЕТЬ # 1 Мантра, neboli posvátné slovo,когда ты идешь и кто опаковал, не запомнишь. Ať se děje cokoli…

Очистка для дальнейшей обработки с помощью

clean_text = prxchange("s/[^\w#@]/ /",-1,text);

RT @Mydy_Rabycad Английский в комментариях ТРЕК # 1 Мантра туманностей, представленных в словаре, в том числе. si opakovat a nezapom nat A se d je cokoli

Как видите, теряется много ценных словесных символов. То, что я хотел бы получить:

RT @Mydy_Rabycad Английский в комментариях ДОРОЖКА # 1 Мантра neboli povátné slovo které je třeba si opakovat nezapomínat Ať se děje cokoli

Как правило, я хотел бы удалить все лишние символы, которые не являются частью каких-либо слов на любом языке, таких как знаки препинания, смайлики и т. Д. ... цель состоит в том, чтобы токенизировать некоторые случайные данные Твиттера.

Так что примеркод (который не работает) будет

data have;
infile datalines4 delimiter='\\\\\';
length text $200.;
input text $;
datalines4;
RT @Mydy_Rabycad: (English in comments) TRACK #1 Mantra, neboli posvátné slovo, které je třeba si opakovat a nezapomínat. Ať se děje cokoli…
;;;;
run;

data have2;
set have;
clean_text = prxchange("s/[^\w#@]/ /",-1,text);
/*Remove multiple blanks introduced through the above regex*/
clean_text = prxchange("s/\s+/ /",-1,clean_text);
run;

Итак, есть ли в SAS управляющая последовательность (9.4 T1M6), такая как \ w для английского языка, то есть что-то вроде \ p {L}, которая позволяетподмножество каждого буквенно-цифрового словаря на каждом языке?

Как указано в комментариях, следующие регулярные выражения также не работают

prxchange("s/(u?)[^\w#@]/ /",-1,text);
prxchange("s/[^\p{L}#@]/ /",-1,text);

Кроме того, функция сжатия не дает желаемых результатов с помощью 'ka'модификатор.

compress(text,' ','ka');

Вопрос связан с этим , но с SAS.

1 Ответ

1 голос
/ 23 октября 2019

ДЛИННАЯ ВЕРСИЯ:

Просто продолжайте добавлять специальные символы, которые вы хотите сохранить, в строку в "abcdefghijklmnopqrstuvwxyz_@#áéříťě". Приветствия!

 Data want; 
    set have;
      New_text=compress(text,"abcdefghijklmnopqrstuvwxyz_@#áéříťě","kis");
 run;
     /* 'k' keeps the characters in the list instead of removing them.
        'i'  ignores the case of the characters to be kept or removed.
        's' adds space characters (blank, horizontal tab, vertical tab, carriage return, line feed, and form feed) to the list of characters.*/

КОРОТКАЯ ВЕРСИЯ:

Это удалит любой символ, который вы добавите / замените в "():."

Data want; 
   set have;
     New_text=compress(text,"():.","i");
 run;
...