首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用自定义汉字索引对日语词汇字段进行排序

用自定义汉字索引对日语词汇字段进行排序
EN

Stack Overflow用户
提问于 2018-07-22 01:33:48
回答 1查看 108关注 0票数 1

我一直在使用一些人几年前创建的10+程序,该程序输入日语文本(词汇表)和自定义kanji索引(如RTK或KKLC或2k1KO或Frequency),并根据该文本中最大的汉字索引输出日语文本。这个想法是把使用汉字的单词放在索引列表中的更低的词汇列表中。最近几个月,随着草莓的更新,该程序停止工作,并输出以下错误:

在C:/Strawberry/perl/lib/warnings.pm第377行vec中使用未初始化的值$mask。未知PerlIO层‘编码’在kanji-排序-1.5.pl第8行未知PerlIO层“编码”在C:/Strawberry/perl/lib/open.pm第120行。未知的PerlIO层“编码”在C:/Strawberry/perl/lib/open.pm第128行。未知的PerlIO层“编码”在C:/Strawberry/perl/lib/open.pm第129行。在C:/Strawberry/perl/lib/warnings.pm第412行vec中使用未初始化的值$mask。在C:/Strawberry/perl/lib/warnings.pm第424行按位和(&)使用未初始化的值$mask。名称“Getopt::Long::CallBack::重载”只使用过一次: C:/Strawberry/perl/lib/overload.pm第11行中可能出现的错误。未知的PerlIO层“编码”位于kanji-sort-1.5.pl第21行。在KANJI的关闭文件句柄kanji上的readline()

我还能做些什么让这个程序重新发挥作用吗?

这是节目。这似乎很简单,把词汇分解成字符,并给他们一个基于汉字的值,其中的指数得分最高。:

代码语言:javascript
运行
复制
#!/usr/bin/perl -w

# $ kanji-sort --kanji kanjiorder.txt --sentence-field 2 < mydeck-exported.txt > mydeck-toimport.txt
# $Revision: 1.5 $ $Date: 2010/01/08 08:22:33 $
# http://ichi2.net/anki/wiki/ContribFugounashi

use open qw( :std :encoding(UTF-8) );
use strict;
use Getopt::Long;
use utf8;

my $kanjifile;
my $sentence_field;
GetOptions(
    'sentence-field=i'=> \$sentence_field,
    'kanji=s' => \$kanjifile
);

my %kanji;
open KANJI, "<$kanjifile";
while(<KANJI>){
    chomp;
    $_=(split /\t/)[0];
    if(exists $kanji{$_}){
    print STDERR "$0: warning: ignoring duplicate kanji: $_: $kanjifile: $.\n";
    }else{
    $kanji{$_}=$.;
    }
}

my @max;
my @lines;
while(<>){
    chomp;
    my $i=$. - 1;
    $lines[$i]=$_;
    my $sentence=(split '\t', $_)[$sentence_field];
    my @chars = split //, $sentence;
    $max[$i]=0;
    foreach my $char (@chars){
    if(($kanji{$char}) && ($kanji{$char} > $max[$i])){
        $max[$i]=$kanji{$char};
    }
    }
}

my @index = 0 .. (@max - 1);
my @sorted = sort {$max[$a] <=> $max[$b]} @index;

my $last=0;
foreach my $i (@sorted){
    my $step=$max[$i] - $last;
    $last=$max[$i];
    my $sentence=(split '\t', $lines[$i])[$sentence_field];
    my @chars = split //, $sentence;
    print "$lines[$i]\t$max[$i]\t$step\n";
}
EN

回答 1

Stack Overflow用户

发布于 2018-07-22 06:27:55

代码中没有语法错误。在Strawberry Perl (Windows)和Linux上签入。修复您的perl安装。

在这里,如何在不运行脚本的情况下检查语法:

代码语言:javascript
运行
复制
perl -c test.pl
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51461358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档