如何从字符串

时间:2015-11-12 20:56:28

标签: python string list

我有一个这样的段落:

  

小腿排骨球尖,法兰克福火腿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)

4 个答案:

答案 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

将字符串除非出现非单词字符,但在“T-bone”中表达式-之间的字符串除外
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))

DEMO

但如果您想要的只删除逗号和句号,则以下内容将正常工作:

Counter(re.split(r'[,\s.]', s))