我正在进行一些推文情绪分析,现在我正试图在Ubuntu命令行上使用perl来清理数据。 我有以下格式的一些数据:
sentiment, 'text'
sentiment = {0, 4}
和text is any valid string
的位置。
目前我无法删除此类数据:
0,'My 21yo son has finally graduated from college!'
4,'The NT2000 is an awesome product!'
4,'what is good88guy doing on my following list?'
我希望以下内容如下所示:
0,'My son has finally graduated from college!'
4,'The is an awesome product!'
4,'what is doing on my following list?'
我不想删除情绪,我还需要删除yo
。我有什么想法可以写这个脚本吗?
答案 0 :(得分:0)
听起来你想要以下内容:
s/\w*\d\w*\s*//g;
您声明自己不希望从头开始删除""有点令人困惑,但你必须添加更多信息才能得到更好的答案。
传达你想要的最简单方法之一是创建一个前后字符串列表,试图让每个字符串都展示一个特例。
答案 1 :(得分:0)
答案 2 :(得分:0)
自从你最近的评论以来,我已经更好地理解了你的问题。
您描述的数据格式必须使用Text::CSV
进行处理,以便考虑引用的字段和逗号分隔符。
根据我的理解,该程序应该符合您的需求。它有use autodie
以避免在无法打开输入文件时手动编码异常的需要,并且Text::CSV
从文件中读取数据,将单引号指定为字段分隔符。
我使用了原始答案中的代码来处理文件的每一行,因为如果您的需求需要改进,它可以提供最大的灵活性。
use strict;
use warnings;
use autodie;
use Text::CSV;
my $csv_proc = Text::CSV->new({ eol => $/, quote_char => "'" });
open my $fh, '<', 'myfile.txt';
while ( my $row = $csv_proc->getline($fh) ) {
my @fields = split ' ', $row->[1];
$row->[1] = join ' ', grep { not /\d/ } @fields;
$csv_proc->print(*STDOUT, $row);
}
<强>输出强>
0,'My son has finally graduated from college!'
4,'The is an awesome product!'
4,'what is doing on my following list?'