perl - 按自定义汉字索引对日语词汇字段进行排序
问题描述
我一直在使用一个 10 多年前创建的 PERL 程序,它输入日文文本(词汇表)和自定义汉字索引(例如 RTK 或 KKLC 或 2k1KO 或频率),并根据最大的汉字索引输出日文文本出现在那个文本中。这个想法是将使用汉字的单词放在索引列表的下方,进一步放在词汇列表的下方。最近几个月随着 Strawberry 的更新,该程序停止工作并输出以下错误:
在 C:/Strawberry/perl/lib/warnings.pm 第 377 行的 vec 中使用未初始化的值 $mask。在 kanji-sort-1.5.pl 第 8 行的未知 PerlIO 层“编码”在 C:/ 的未知 PerlIO 层“编码” Strawberry/perl/lib/open.pm 第 120 行。C:/Strawberry/perl/lib/open.pm 中的未知 PerlIO 层“编码”第 128 行。C:/Strawberry/perl/lib/ 中的未知 PerlIO 层“编码” open.pm 第 129 行。在 C:/Strawberry/perl/lib/warnings.pm 的 vec 中使用未初始化的值 $mask 第 412 行。在 C:/Strawberry/perl/ 中按位和 (&) 使用未初始化的值 $mask lib/warnings.pm 第 424 行。名称“Getopt::Long::CallBack::OVERLOAD”仅使用过一次:C:/Strawberry/perl/lib/overload.pm 第 11 行可能存在拼写错误。未知 PerlIO 层“编码”位于kanji-sort-1.5.pl 第 21 行。kanji-sort-1.5.pl 第 22 行关闭文件句柄 KANJI 上的 readline()。
我能做些什么来让这个程序再次运行吗?
这是程序。将词汇分解成字符并根据其中的最高索引分数给它们一个基于汉字的值似乎很简单。:
#!/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";
}
解决方案
您的代码中没有语法错误。在 Strawberry Perl (Windows) 和 Linux 中检查。修复你的 perl 安装。
在这里,您如何在不运行脚本的情况下检查语法:
perl -c test.pl
推荐阅读
- javascript - 无法对从 innerText 提取的日期数组进行排序
- python - 如何在 AWS Lambda 中最好地使用 Python 3 的 mimetypes 模块?
- python - 使用 PyMongo 的 MongoDB Atlas 的 ServerTimeoutError(运行设置代码)
- c - 欧拉计划 - 问题 22:答案降低 3.35%
- c# - 如果给定函数参数而不是文字,实体框架和 Oracle,Linq where 子句字符串比较不返回任何记录
- java - Lombok 和 builder 注释
- javascript - 将动画添加到下拉菜单
- excel - 如何修复“运行时错误 1004,对象“_Application”的方法“宽度”失败”
- javascript - 显示完全错误图标的材料设计图标
- amazon-web-services - 使用 AWS-SDK 访问 AWS SSO