Perl – 文件编码和单词比较

Perl – 文件编码和单词比较,第1张

概述我有一个文件,每行有一个短语/术语,我从STDIN读到perl.我有一个停用词列表(如“á”,“são”,“é”),我希望将每个词与每个词进行比较,如果它们相等则删除.问题是我不确定文件的编码格式. 我从文件命令得到这个: words.txt: Non-ISO extended-ASCII English text 我的linux终端是UTF-8,它显示了某些单词的正确内容,而其他单词则没有.以下 @H_502_1@ 我有一个文件,每行有一个短语/术语,我从STDIN读到perl.我有一个停用词列表(如“á”,“são”,“é”),我希望将每个词与每个词进行比较,如果它们相等则删除.问题是我不确定文件的编码格式.

我从文件命令得到这个:

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

我的linux终端是UTF-8,它显示了某些单词的正确内容,而其他单词则没有.以下是其中一些的输出:

condi<E3>conte<FA>dosajuda,mas não resolvemo<E7>ambiquepedagógico são fenómenos

您可以看到第3行和第5行正确识别带有重音符和特殊字符的单词,而其他行则没有.其他行的正确输出应为:condiã,conteúdos和moçambique.

如果我使用binmode(STDOUT,utf8),“错误”行现在正确输出而其他行不正确.例如第3行:

ajuda,mas não resolve

我该怎么办?

解决方法 它的工作原理如下:

C:\Dev\Perl :: chcpAktive codepage: 1252.C:\Dev\Perl :: type mixed-enCoding.txteins zwei drei Käse vIEr fünf Wursteins zwei drei Käse vIEr fünf WurstC:\Dev\Perl :: perl mixed-enCoding.pl < mixed-enCoding.txteins zwei drei vIEr fünfeins zwei drei vIEr fünf

mixed-enCoding.pl的位置如下:

use strict;use warnings;use utf8; # source in UTF-8use 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,请使用utf8,如果你的编码不​​是,则使用utf8.

根据tchrist的声音建议更新:

use strict;use warnings;# source in latin1use 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 – 文件编码和单词比较全部内容,希望文章能够帮你解决Perl – 文件编码和单词比较所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1257891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存