我使用Lingua :: EN :: Tagger Perl模块来标记用户输入的词性。我的代码部分完美无缺。然而,问题是我只想保留具有“NN,NNS,NNP,NNPS”的名词标签的输入,并将这些单词存储在单独的数组@nounArray中。用户将输入诸如“你的名字是什么?”之类的问题。问题的每个元素都将被标记为:What/WP is/is your/PN name/NN
my @UserInput = $readable_text;
my @nounArray;
foreach my $UserInput (@UserInput){
if ($UserInput =~ m/NN|NNS$|NNP$|NNPS$/){
$UserInput = @nounArray;
}
print @nounArray;
}
但是,运行代码时没有任何反应。目标是在将用户输入的名词与原始数组分开后,将它们的名词放在单独的数组中。我不想打印数组,但我这样做是为了查看代码是否正常工作。
答案 0 :(得分:1)
由于您想迭代$readable_text
中的单词,您可以先将它们拆分为数组,
my $readable_text = "What/WP is/is your/PN name/NN";
my @UserInput = split ' ', $readable_text;
my @nounArray;
foreach my $UserInput (@UserInput) {
if ($UserInput =~ m/NN|NNS$|NNP$|NNPS$/) {
# print "$UserInput\n";
push @nounArray, $UserInput;
}
}
print @nounArray;
答案 1 :(得分:0)
$
匹配字符串的末尾。我想你的字符串最后至少有一个\n
,这会阻止它们匹配。
但正如您在评论中指出的那样,您似乎在尝试匹配字边界,因此只需将$
中的所有\b
替换为{{1}}。
答案 2 :(得分:0)
首先,用空格分割你的单词:
my @UserInput = split /\s+/, $UserInput;
然后grep
为名词:
my @nouns = grep { m%/N% } @UserInput; # only noun tags include /N