我正在尝试识别某个特定单词,然后计算它。我需要保存每个标识符的计数。
例如,
风险风险无风险利率
星号风险风险
市场风险风险[风险
*一份文件包含上述字词,我需要计算“风险”。不是星号。我还需要计算[风险'风险'。这是我到目前为止所拥有的。但是,它会返回星号和[风险以及风险]的计数。我不需要计算星号,但仅限于风险,包括[风险。我试图使用正则表达式,但不断收到错误。另外,我是Python的初学者。如果有人有任何想法,请帮助我!! ^^谢谢。
from collections import defaultdict
word_dict = defaultdict(int)
for line in mylist:
words = line.lower().split()
for word in words:
word_dict[word]+=1
for word in word_dict:
if 'risk' in word:
word, word_dict[word]
答案 0 :(得分:2)
再给一个正则表达式。匹配由字边界
包围的字符串'risk'
import re
re.findall(r'\brisk\b', 'risk risk') ## 2 matches
re.findall(r'\brisk\b', 'risk risk riskrisk') ## 2 matches
re.findall(r'\brisk\b', 'risk risk riskrisk [risk') ## 3 matches
re.findall(r'\brisk\b', 'risk risk riskrisk [risk asterisk') ## 3 matches
答案 1 :(得分:1)
采用流水线方法。我的意思是,在将单词添加到字典之前,对文本执行任何转换以使计数正确。
word_dict = {} # empty dictionary
for line in mylist:
words = line.strip().lower().split() # the strip gets rid of new lines
for word in words:
# the strip here will strip away any surrounding punctuation.
# add any other symbols to the string that you need
# the key insight here, is you get rid of extra stuff BEFORE inserting
# into the dictionary
word_dict[word.strip('[/@#$%')]+=1
for word in word_dict:
print word, word_dict[word]
# to just see the count for risk:
print word_dict['risk']
只要你把你的单词计算为“风险”,它就算上“星号”这个词是很好的。
答案 2 :(得分:0)
您可以尝试以下代码段:
import shlex
words = shlex.split("risk risk risk free interest rate")
word_count = len([word for word in words if word == "risk" or word =="[risk"])
print word_count
答案 3 :(得分:0)
我认为你需要更严格地定义risk
的标准和不重要的标准。但是,我会使用Counter
:
from collections import Counter
c = Counter()
with open(yourfile) as f:
for line in f:
c += Counter(line.split())
现在,在这一点上,您需要创建一个函数来判断它是否应该算作“风险”:
def is_risk(word):
w = word.lower()
return 'risk' in w and w!='asterisk'
现在只需添加与这些键对应的元素:
sum( c[k] for k in c if is_risk(k) )
答案 4 :(得分:-2)
所以你算了
'\n' + risk + '\n'
'\n' + risk + ' '
' ' + risk + '\n'
' ' + risk + ' '