gpt4 book ai didi

emoji - 如何在文本文件中查找和删除表情符号?

转载 作者:行者123 更新时间:2023-12-04 14:40:38 40 4
gpt4 key购买 nike

我正在尝试从我主要使用 sed 和一些 perl 命令解析的文本文件中删除所有表情符号,并且最好将它们存储在一个单独的文件中,但这不是必需的。

我可以用 bash 或 perl 轻松做到这一点吗?还是我应该使用另一种语言?

编辑:感谢 Cyrus 和 Barmar 为我指明了正确的方向,即 this question .但是,它没有告诉我如何仅从文本文件中删除表情符号。他们使用 bash 行:

grep -P "[\x{1f300}-\x{1f5ff}\x{1f900}-\x{1f9ff}\x{1f600}-\x{1f64f}\x{1f680}-\x{1f6ff}\x{2600}-\x{26ff}\x{2700}-\x{27bf}\x{1f1e6}-\x{1f1ff}\x{1f191}-\x{1f251}\x{1f004}\x{1f0cf}\x{1f170}-\x{1f171}\x{1f17e}-\x{1f17f}\x{1f18e}\x{3030}\x{2b50}\x{2b55}\x{2934}-\x{2935}\x{2b05}-\x{2b07}\x{2b1b}-\x{2b1c}\x{3297}\x{3299}\x{303d}\x{00a9}\x{00ae}\x{2122}\x{23f3}\x{24c2}\x{23e9}-\x{23ef}\x{25b6}\x{23f8}-\x{23fa}]"  myflie.txt | more

这让我得到了所有 线路 包含一个表情符号。
grep -Pv将从输入中删除这些行,
grep -Po将只返回表情符号,
grep -Pov什么都不返回。

有谁知道如何从文本中删除这些特定字符?

注意:我知道 this question ,但我的文本文件根本没有格式化。表情符号与文本的其余部分混合在一起。

最佳答案

2020 更新:Perl v5.32 使用 Unicode 13 并支持 several properties处理表情符号。您可以简单地使用 Emoji属性(property):

#!perl
use v5.32;
use utf8;
use open qw(:std :utf8);

while( <<>> ) { # double diamond (from v5.26)
s/\p{Emoji}//g;
print;
}
作为单行,这变成:
% perl -CS -pe 's/\p{Emoji}//g' file1 file2 ...
旧 Perls 的字符类
在 Perl 中,删除表情符号就是这么简单。从本质上讲,这与您在 sed 中所做的非常接近。更新任务的模式和其他详细信息:
#!perl
use utf8;
use open qw(:std :utf8);

my $pattern = "[\x{1f300}-\x{1f5ff}\x{1f900}-\x{1f9ff}\x{1f600}-\x{1f64f}\x{1f680}-\x{1f6ff}\x{2600}-\x{26ff}\x{2700}-\x{27bf}\x{1f1e6}-\x{1f1ff}\x{1f191}-\x{1f251}\x{1f004}\x{1f0cf}\x{1f170}-\x{1f171}\x{1f17e}-\x{1f17f}\x{1f18e}\x{3030}\x{2b50}\x{2b55}\x{2934}-\x{2935}\x{2b05}-\x{2b07}\x{2b1b}-\x{2b1c}\x{3297}\x{3299}\x{303d}\x{00a9}\x{00ae}\x{2122}\x{23f3}\x{24c2}\x{23e9}-\x{23ef}\x{25b6}\x{23f8}-\x{23fa}]";

while( <DATA> ) { # use <> to read from command line
s/$pattern//g;
print;
}

__DATA__
Emoji at end 😀
🗿 Emoji at beginning
Emoji 🙏 in middle
UTS #51 mentions an Emoji property ,但未在 perluniprop 中列出.如果有这样的事情,您可以简化删除具有该属性的任何内容:
while( <DATA> ) {
s/\p{Emoji}//g;
print;
}
Emoticon属性,但这不包括您的字符类。我还没有看它是否与 UTS #51 中的 Emoji 属性相同。
用户定义的 Unicode 属性
您可以制作 your own properties通过定义一个子程序开始是 InIs后跟您选择的属性名称。该子例程返回一个潜在的多行字符串,其中每一行是单个十六进制代码编号或由水平空白分隔的两个十六进制代码编号。所有这些中的任何字符都是您属性(property)的一部分。
这是与用户定义的 Unicode 属性相同的字符类。请注意,我使用了 squiggly heredoc ,主要是因为我可以在本地用前导空格编写程序,所以我可以直接粘贴到 StackOverflow 中。 IsEmoji 中的行不过,不能有前导空格,但缩进的 heredoc 会照顾到这一点:
#!perl
use v5.26; # for indented heredoc
use utf8;
use open qw(:std :utf8);

while( <DATA> ) { # use <> to read from command line
s/\p{IsEmoji}//g;
print;
}

sub IsEmoji { <<~"HERE";
1f300 1f5ff
1f900 1f9ff
1f600 1f64f
1f680 1f6ff
2600 26ff
2700 27bf
1f1e6 1f1ff
1f191 1f251
1f004 1f0cf
1f170 1f171
1f17e 1f17f
1f18e
3030
2b50
2b55
2934 2935
2b05 2b07
2b1b 2b1c
3297
3299
303d
00a9
00ae
2122
23f3
24c2
23e9 23ef
25b6
23f8 23fa
HERE
}

__DATA__
Emoji at end 😀
🗿 Emoji at beginning
Emoji 🙏 in middle
你可以把它放在一个模块中:
# IsEmoji.pm
sub IsMyEmoji { <<~"HERE";
1f300 1f5ff
... # all that other stuff too
23f8 23fa
HERE
}

1;
现在您可以在一行中使用它( -I. 将当前目录添加到模块搜索路径, -M 表示要加载的模块):
$ perl -CS -I. -MIsEmoji -pe 's/\p{IsEmoji}//g' file1 file2
除此之外,您还被困在单行中的长字符类中。

关于emoji - 如何在文本文件中查找和删除表情符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58421709/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com