[英]How to compare each element of an array using regex?
我正在使用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;
}
但是,當我運行代碼時,什么也沒有發生。 目的是在將用戶輸入的名詞與原始數組分開之后,將其放置在單獨的數組中。 我不想打印數組,但是我這樣做是為了查看代碼是否正常工作。
由於您要遍歷$readable_text
visible_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;
$
匹配字符串的末尾。 我想您的字符串末尾至少有一個\\n
,這將阻止它們匹配。
但是正如您在評論中指出的那樣,您似乎正在嘗試匹配此處的單詞邊界,因此只需用\\b
替換表達式中的所有$
。
首先,按空格分隔您的單詞:
my @UserInput = split /\s+/, $UserInput;
然后用grep
表示名詞:
my @nouns = grep { m%/N% } @UserInput; # only noun tags include /N
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.