我有一个这样的段落:
小腿排骨球尖,法兰克福火腿alcatra臀部pancetta picanha 牛肋排比尔森猪鹿肉鸡火腿飞节。 T骨牛肋骨 鸡肉干里脊肉andouille turducken凯文短肋骨。 鼓槌培根短腰,鸡turducken leberkas chuck猪 猪肚doner biltong火腿飞节。猪肉汉堡里脊肉卷 prosciutto pancetta肉丸舌头鼓槌火腿飞节。肉丸 bresaola landjaeger doner brisket五花肉pancetta排骨 咸牛肉里脊培根fatback猪肉里脊boudin臀部kevin andouille牛肉火腿capicola干咸肉条。猪排腌牛肉猪 火鸡,意大利熏火腿干酪kielbasa短腰地面圆形cupim 肩。
我需要编写一个代码来查明某个单词被说出多少次。我无法弄清楚如何删除这些单词旁边的逗号和句号!以下是我到目前为止的情况:
for line in input_file:
lines = line.split(' ')
lines = line.replace('\n', '')
new_List.append(lines)
答案 0 :(得分:0)
word_dict = {}
for line in input_file:
line = line.replace('\n', '')
line = line.replace(',', '')
line = line.replace('.', '')
# now line just has words and spaces
words = line.split(' ')
for word in words:
if word in word_dict:
word_dict[word] += 1
else:
word_dict[word] = 0
答案 1 :(得分:0)
有几件事可能会有所帮助。首先,Counter
:
s = '''Shank spare ribs ball tip, frankfurter alcatra rump ...'''
c = Counter(s.split())
请注意,不要将参数传递给str.split
:
如果可选的第二个参数sep不存在或为None,则单词由空格字符的任意字符串(空格,制表符,换行符,返回,换页)分隔。
接下来,您可以使用str.count
来计算每个单词的出现次数,而不是Counter
:
for word in s.split():
print word, s.count(word)
str.split
以上的另一个选项是简单的regex:
for word in re.findall(r'[a-zA-Z-_]+', s):
print word, s.count(word)
最后,作为问题的一部分,您可以使用str.rstrip
从字符串末尾删除字符:
s = 'foobar.,'
t = s.rstrip('.,')
答案 2 :(得分:0)
你可以很容易地用Counter做到这一点:
import string
from collections import Counter
# s = s.lower() # if you don't care about case
chars = set(string.ascii_letters + string.whitespace)
c = Counter(''.join(c for c in s if c in chars).split())
答案 3 :(得分:0)
您可以使用re.split
-
之间的字符串除外
import re
from collections import Counter
s = '''Shank spare ribs ball tip, frankfurter alcatra rump pancetta
picanha beef ribs biltong pig venison chicken ham hock.
T-bone beef ribs chicken pork jerky...
'''
Counter(re.split(r'(?!<\w)\W(?!\w)|\s+', s))
但如果您想要的只删除逗号和句号,则以下内容将正常工作:
Counter(re.split(r'[,\s.]', s))