簡體   English   中英

如何使用正則表達式比較數組的每個元素?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM