2016-10-09 15 views
-1

トークンテキストで特定の式を数えようとしています。私のコードは:リストのcount()内の正規表現が機能しない

tokens = nltk.word_tokenize(raw) 
print(tokens.count(r"<cash><flow>")) 

「トークン」はトークン化されたテキストのリストです(下図の一部)。しかし、ここの正規表現は機能しておらず、出力には「キャッシュフロー」が発生していないことが示されていますが、これは正しくありません。私はエラーメッセージを受け取りません。私が「現金」だけを数えれば、うまくいく。

'that', 'produces', 'cash', 'flow', 'from', 'operations', ',', 'none', 'of', 'which', 'are', 'currently', 'planned', ',', 'the', 'cash', 'flows', 'that', 'could', 'result', 'from' 

誰でも問題の原因を知っていますか?

+0

それから別々に数えてみてください。 –

+0

@LukStorms plsは、私の場合は、 – dwill

+0

@WiktorStribiżewの上に追加されたトークンの入力を参照してください実際に私はそれらを一緒に数える必要があります '現金'と 'フロー'は別に別の場所に表示されます確かに – dwill

答えて

1

これには正規表現は必要ありません。
トークンで一致するキーワードを見つけて要素を数えればいいです。

例:

tokens = ['that','produces','cash','flow','from','operations','with','cash'] 
keywords = ['cash','flow'] 

keywords_in_tokens = [x for x in keywords if x in tokens] 
count_keywords_in_tokens = len(keywords_in_tokens) 

print(keywords_in_tokens) 
print(count_keywords_in_tokens) 

count_keywords_in_tokens両方の単語がリストに見出されるので2を返します。

正規表現の方法にするには、正規表現パターンに基づいて一致するものを見つけるための文字列が必要です。 3つのマッチがあるので2つのキーワードがOR(パイプ)

import re 

tokens = ['that','produces','cash','flow','from','operations','with','cash'] 
string = ' '.join(tokens) 

pattern = re.compile(r'\b(cash|flow)\b', re.IGNORECASE) 

keyword_matches = re.findall(pattern, string) 
count_keyword_matches = len(keyword_matches) 
print(keyword_matches) 
print(count_keyword_matches) 

count_keyword_matchesによって分離されている以下の例で
3を返します。

+0

KukStorms、あなたの解決策は私のために働きます。ありがとう! – dwill

関連する問題