2016-10-09 2 views
-1

토큰 화 된 텍스트에서 특정 표현식을 계산하려고합니다. 내 코드는 다음과 같습니다.목록의 count() 내의 정규 표현식이 작동하지 않습니다.

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

'토큰'은 토큰 화 된 텍스트 목록입니다 (일부는 아래에 표시). 하지만 여기 정규식이 작동하지 않고 결과가 'cash flow'가 0 번 발생하는 것을 보여줍니다. 이는 올바르지 않습니다. 그리고 오류 메시지가 나타납니다. 내가 '현금'만 계산하면 잘 작동합니다.

'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를 반환합니다.

정규 표현식을 사용하려면 정규 표현식 패턴을 기반으로 일치하는 것을 찾으려면 문자열이 필요합니다. 2 개 키워드 아래 예에서
은 OR (배관) 3 일치가 있으므로

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

관련 문제