gpt4 book ai didi

Perl-文件编码和单词比较

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

我有一个文件,每行有一个短语/术语,我从STDIN读到perl。我有一个停用词列表(例如“á”,“são”,“é”),我想将它们与每个术语进行比较,如果它们相等则将其删除。问题是我不确定文件的编码格式。

我是从file命令获得的:

words.txt: Non-ISO extended-ASCII English text

我的linux终端位于UTF-8中,它为某些单词显示正确的内容,而对于其他单词则没有显示正确的内容。这是其中一些的输出:
condi<E3>
conte<FA>dos
ajuda, mas não resolve
mo<E7>ambique
pedagógico são fenómenos

您会看到第三行和第五行正确地识别了带有重音和特殊字符的单词,而其他单词则没有。其他行的正确输出应为:condiã,conteúdos和moçambique。

如果我使用 binmode(STDOUT, utf8),则“错误”行现在可以正确输出,而其他行则不能。例如第三行:

ajuda, mas não resolve



伙计们,我该怎么办?

最佳答案

它的工作方式如下:

C:\Dev\Perl :: chcp
Aktive Codepage: 1252.

C:\Dev\Perl :: type mixed-encoding.txt
eins zwei drei Käse vier fünf Wurst
eins zwei drei Käse vier fünf Wurst

C:\Dev\Perl :: perl mixed-encoding.pl < mixed-encoding.txt
eins zwei drei vier fünf
eins zwei drei vier fünf
mixed-encoding.pl的位置如下:
use strict;
use warnings;
use utf8; # source in UTF-8
use Encode 'decode_utf8';
use List::MoreUtils 'any';

my @stopwords = qw( Käse Wurst );

while ( <> ) { # read octets
chomp;
my @tokens;
for ( split /\s+/ ) {
# Try UTF-8 first. If that fails, assume legacy Latin-1.
my $token = eval { decode_utf8 $_, Encode::FB_CROAK };
$token = $_ if $@;
push @tokens, $token unless any { $token eq $_ } @stopwords;
}
print "@tokens\n";
}

请注意,脚本不必以UTF-8编码。只是,如果脚本中包含时髦的字符数据,则必须确保编码匹配,如果编码为UTF-8,则应确保为 use utf8;如果不是,则请确保为不匹配。

根据tchrist的声音建议进行更新:
use strict;
use warnings;
# source in Latin1
use Encode 'decode';
use List::MoreUtils 'any';

my @stopwords = qw( Käse Wurst );

while ( <> ) { # read octets
chomp;
my @tokens;
for ( split /\s+/ ) {
# Try UTF-8 first. If that fails, assume 8-bit encoding.
my $token = eval { decode utf8 => $_, Encode::FB_CROAK };
$token = decode Windows1252 => $_, Encode::FB_CROAK if $@;
push @tokens, uc $token unless any { $token eq $_ } @stopwords;
}
print "@tokens\n";
}

关于Perl-文件编码和单词比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5901633/

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