Perl:如何从字典文件中打印随机部分(单词定义)

Perl:如何从字典文件中打印随机部分(单词定义),perl,Perl,我想在终端Unix中用Perl在字典文件中打印一个随机生词English。我想选择并打印一条随机线和两条跟随线 但我的代码并不能完成这项工作 请帮我改进一下 我希望的输出示例如下: @inspire:。。。。 ghk lko。。。 字典文件: 灵感:意味着。。。。 abc定义。。。 ghk lmn ... @启发:。。。。 ghk lko。。。 @人们:。。。 ... 完整的字典文件在这里。大约14MB 我的代码: 使用严格; 使用警告; 使用文件::复制qw(复制移动); my$files

我想在终端Unix中用Perl在字典文件中打印一个随机生词English。我想选择并打印一条随机线和两条跟随线

但我的代码并不能完成这项工作

请帮我改进一下

我希望的输出示例如下:
@inspire:。。。。
ghk
lko。。。
字典文件: 灵感:意味着。。。。 abc定义。。。 ghk lmn ... @启发:。。。。 ghk lko。。。 @人们:。。。 ... 完整的字典文件在这里。大约14MB

我的代码:
使用严格;
使用警告;
使用文件::复制qw(复制移动);
my$files='anhviet109K.txt';
我的$fh;
我的$linewanted=16+int(兰特(513796-16));
#513796:文件dic.txt的行数

开放($fh,“类似的东西,也许

您的数据帮助我排除了字典文件中的标题条目

此程序查找文件中所有条目(以
@
开头的行)的位置,然后随机选择一个条目并打印它

Tốt họ碳钛ế吴安梅ắn

使用严格;
使用“全部”警告;
使用Fcntl':seek';
使用常量文件=>'anhviet109K.txt';

打开我的$fh,“像这样的东西,也许

您的数据帮助我排除了字典文件中的标题条目

此程序查找文件中所有条目(以
@
开头的行)的位置,然后随机选择一个条目并打印它

Tốt họ碳钛ế吴安梅ắn

使用严格;
使用“全部”警告;
使用Fcntl':seek';
使用常量文件=>'anhviet109K.txt';

打开我的$fh,“单通道方法:

use strict;
use warnings;
use autodie;

open my $fh, '<:utf8', 'anhviet109K.txt';

my $definition = '';
my $count;
my $select;

while (my $line = <$fh>) {
    if ($line =~ /^@(?!00-)/) {
        ++$count;
        $select = rand($count) < 1;
        if ($select) {
            $definition = $line;
        }
    }
    elsif ($select) {
        $definition .= $line;
    }
}

# remove blank line that some entries have
$definition =~ s/^\s+\z//m;

binmode STDOUT, ':utf8';
print $definition;
使用严格;
使用警告;
使用自动模具;

打开我的$fh,“单通道方法:

use strict;
use warnings;
use autodie;

open my $fh, '<:utf8', 'anhviet109K.txt';

my $definition = '';
my $count;
my $select;

while (my $line = <$fh>) {
    if ($line =~ /^@(?!00-)/) {
        ++$count;
        $select = rand($count) < 1;
        if ($select) {
            $definition = $line;
        }
    }
    elsif ($select) {
        $definition .= $line;
    }
}

# remove blank line that some entries have
$definition =~ s/^\s+\z//m;

binmode STDOUT, ':utf8';
print $definition;
使用严格;
使用警告;
使用自动模具;


打开我的$fh,'请给出你的字典文件的适当示例,我们可以使用它进行测试。整个东西只有几MB,因此你可以将它发布到Tks Borodin上,我已经添加了我的dic链接进行测试。非常感谢。这对lotTks Borodin很有帮助。非常有用的代码。请给出你的字典文件的适当示例,我们可以使用它进行测试。整个东西只有几MB,所以你可以把它发布在Tks Borodin上,我已经添加了我的dic链接用于测试。非常感谢。这对lotTks Borodin很有帮助。非常有用的代码。非常好的方法。我总是害怕
seek
tell
,因为我假设它们会引入±1问题,但你的解决方案是如此简单和优雅。加上t揭示了你的第二个爱好:语言:-)@PerlDog:只要你忽略
tell
返回的实际值,只使用它们反馈到
seek
(也就是说,将它们用作黑盒对象)一切都会很好。谢谢,但我知道的语言远远少于我想要的。我的主要兴趣是将语言和方言形式化,以便将它们视为数据。不幸的是,这项技术始于西方语言,后来才试图将亚洲和非洲的语言和方言压缩到同一模式中。Inevi很明显,Unicode程序并没有起作用。坦白地说,Unicode程序是一个巨大的进步。我承认我没有经常使用搜索/告诉你。你用它来“冻结”和“解冻”文件指针。下次我会考虑。看起来很容易。//语言很有趣,我也很喜欢方言,但我并没有科学地处理它们。“。我只是喜欢它们。@PerlDog:我不会把它比作冻结/解冻,这只是收集文件元数据的问题。”。它是将整个文件读入文本块数组的一种替代方法,在这里,这是一个非常有效的解决方案。我猜今天的风吹向了不同的方向!基本上就是这样。很多人认为这个模块太慢了,但它总是很好的,除非它对你的应用程序来说太慢了。我认为这是一个遗憾,它没有使用太多,因为它允许您编辑一个文件作为一个数组的行。魔术正如PerlDog所暗示的——感谢您在seek/tell.com上的曝光。非常好的方法。我总是害怕
seek
tell
,因为我假设它们会引入±1问题,但您的解决方案是如此简单和优雅。此外,它还揭示了你的第二个爱好:语言:-)@PerlDog:只要你忽略
tell
返回的实际值,只使用它们反馈到
seek
(也就是说,将它们用作黑盒对象),一切都会正常工作。谢谢你,但我懂的语言比我想要的要少得多。我的主要兴趣是将语言和方言形式化,以便将它们作为数据处理。不幸的是,这项技术开始于西方语言,直到后来才试图将亚洲和非洲的语言和方言压缩成同一种模式。不可避免地,它不起作用,老实说,Unicode程序已经向前迈出了一大步,我承认我没有经常使用seek/tell。您可以像“冻结”和“解冻”文件指针一样使用它。下次我会考虑的。看起来很容易语言真的很有趣,我也很喜欢方言,但我不“科学地”处理它们。我只是喜欢它们。@PerlDog:我不会把它比作冻结/解冻,这只是收集文件元数据的问题。它是将整个文件读入文本块数组的一种替代方法,在这里,这是一个非常有效的解决方案。我猜今天的风吹向了不同的方向!基本上就是这样。很多人认为这个模块太慢了,但它总是很好的,除非它对你的应用程序来说太慢了。我认为这是一个遗憾,它没有使用太多,因为它允许您编辑一个文件作为一个数组的行。魔术正如PerlDog所暗示的——谢谢你在seek/tell.Love上的曝光——我喜欢这个算法——不得不花一分钟的时间来考虑它,以确信它是“公平的”——这可能只是意味着我比大多数人慢了一点。:-)@马蒂,我第一次看到它的时候,我也是。证明:如果有1个元素,则为所选元素。如果你有一个相当好的答案