Python:我想检查字符串中的字数

2024-09-25 16:24:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我设法做到了这一点,但我正在挣扎的情况是,当我必须考虑'颜色'等于'颜色'为所有这样的话,并返回相应的计数。为了做到这一点,我为此写了一本美国和英国英语中拼写变化的常用词词典,但很肯定这不是正确的方法。你知道吗

 ukus=dict()      ukus={'COLOUR':'COLOR','CHEQUE':'CHECK',
'PROGRAMME':'PROGRAM','GREY':'GRAY',
'JEWELLERY':'JEWELERY','ALUMINIUM':'ALUMINUM',
'THEATER':'THEATRE','LICENSE':'LICENCE','ARMOUR':'ARMOR',
'ARTEFACT':'ARTIFACT','CENTRE':'CENTER',
'CYPHER':'CIPHER','DISC':'DISK','FIBRE':'FIBER',
'FULFILL':'FULFIL','METRE':'METER',
'SAVOURY':'SAVORY','TONNE':'TON','TYRE':'TIRE',
'COLOR':'COLOUR','CHECK':'CHEQUE',
'PROGRAM':'PROGRAMME','GRAY':'GREY',
'JEWELERY':'JEWELLERY','ALUMINUM':'ALUMINIUM',
'THEATRE':'THEATER','LICENCE':'LICENSE','ARMOR':'ARMOUR',
'ARTIFACT':'ARTEFACT','CENTER':'CENTRE',
'CIPHER':'CYPHER','DISK':'DISC','FIBER':'FIBRE',
'FULFIL':'FULFILL','METER':'METRE','SAVORY':'SAVOURY',
'TON':'TONNNE','TIRE':'TYRE'}

这是我用来检查这些值的字典。正如你所看到的,这会降低性能。Pyenchant不适用于64位python。有人请帮帮我。先谢谢你。你知道吗


Tags: 颜色checkprogramcolorgreycolourgrayprogramme
2条回答

第1步: 创建一个临时字符串,然后用dict的values替换所有单词及其对应的键,如下所示:

>>> temp_string = str(my_string)
>>> for k, v in ukus.items():
...     temp_string = temp_string.replace(" {} ".format(v), " {} ".format(k))  # < surround by space " " to replace only words

第2步: 现在,为了在字符串中找到单词,首先将它拆分成list个单词,然后使用^{}获得list中每个元素的计数。下面是示例代码:

>>> from collections import Counter
>>> my_string = 'Hello World! Hello again. I am saying Hello one more time'
>>> count_dict = Counter(my_string.split())
# Value of count_dict:
# Counter({'Hello': 3, 'saying': 1, 'again.': 1, 'I': 1, 'am': 1, 'one': 1, 'World!': 1, 'time': 1, 'more': 1})
>>> count_dict['Hello']
3

第3步: 现在,既然您想要dict中的“color”和“color”的计数,请重新迭代dict以添加这些值,缺少的值为“0”

for k, v in ukus.items():
    if k in count_dict:
        count_dict[v] = count_dict[k]
    else:
        count_dict[v] = count_dict[k] = 0   

好吧,我想我从你的评论中了解到了足够的信息来提供这个解决方案。下面的函数允许您选择UK或US替换(它使用US默认值,但您当然可以翻转它),并允许您对字符串执行轻微的卫生处理。你知道吗

import re

ukus={'COLOUR':'COLOR','CHEQUE':'CHECK',
'PROGRAMME':'PROGRAM','GREY':'GRAY',
'JEWELLERY':'JEWELERY','ALUMINIUM':'ALUMINUM',
'THEATER':'THEATRE','LICENSE':'LICENCE','ARMOUR':'ARMOR',
'ARTEFACT':'ARTIFACT','CENTRE':'CENTER',
'CYPHER':'CIPHER','DISC':'DISK','FIBRE':'FIBER',
'FULFILL':'FULFIL','METRE':'METER',
'SAVOURY':'SAVORY','TONNE':'TON','TYRE':'TIRE'}
usuk={'COLOR':'COLOUR','CHECK':'CHEQUE',
'PROGRAM':'PROGRAMME','GRAY':'GREY',
'JEWELERY':'JEWELLERY','ALUMINUM':'ALUMINIUM',
'THEATRE':'THEATER','LICENCE':'LICENSE','ARMOR':'ARMOUR',
'ARTIFACT':'ARTEFACT','CENTER':'CENTRE',
'CIPHER':'CYPHER','DISK':'DISC','FIBER':'FIBRE',
'FULFIL':'FULFILL','METER':'METRE','SAVORY':'SAVOURY',
'TON':'TONNNE','TIRE':'TYRE'}

def str_wd_count(my_string, uk=False, hygiene=True):
    us = not(uk)
    # if the UK flag is TRUE, default to UK version, else default to US version
    print "Using the "+uk*"UK"+us*"US"+" dictionary for default words"

    # optional hygiene of non-alphanumeric characters for pure word counting
    if hygiene:
        my_string = re.sub('[^ \d\w]',' ',my_string)
        my_string = re.sub(' {1,}',' ',my_string)

    # create a list of the unqique words in the text
    ttl_wds = [ukus.get(w,w) if us else usuk.get(w,w) for w in my_string.upper().split(' ')]
    wd_counts = {}
    for wd in ttl_wds:
        wd_counts[wd] = wd_counts.get(wd,0)+1

    return wd_counts

作为使用示例,请考虑字符串

str1 = 'The colour of the dog is not the same as the color of the tire, or is it tyre, I can never tell which one will fulfill'

# Resulting sorted dict.items() With Default Settings
'[(THE,5),(TIRE,2),(COLOR,2),(OF,2),(IS,2),(FULFIL,1),(NEVER,1),(DOG,1),(SAME,1),(IT,1),(WILL,1),(I,1),(AS,1),(CAN,1),(WHICH,1),(TELL,1),(NOT,1),(ONE,1),(OR,1)]'

# Resulting sorted dict.items() With hygiene=False
'[(THE,5),(COLOR,2),(OF,2),(IS,2),(FULFIL,1),(NEVER,1),(DOG,1),(SAME,1),(TIRE,,1),(WILL,1),(I,1),(AS,1),(CAN,1),(WHICH,1),(TELL,1),(NOT,1),(ONE,1),(OR,1),(IT,1),(TYRE,,1)]'

# Resulting sorted dict.items() With UK Swap, hygiene=True
'[(THE,5),(OF,2),(IS,2),(TYRE,2),(COLOUR,2),(WHICH,1),(I,1),(NEVER,1),(DOG,1),(SAME,1),(OR,1),(WILL,1),(AS,1),(CAN,1),(TELL,1),(NOT,1),(FULFILL,1),(ONE,1),(IT,1)]'

# Resulting sorted dict.items() With UK Swap, hygiene=False
'[(THE,5),(OF,2),(IS,2),(COLOUR,2),(ONE,1),(I,1),(NEVER,1),(DOG,1),(SAME,1),(TIRE,,1),(WILL,1),(AS,1),(CAN,1),(WHICH,1),(TELL,1),(NOT,1),(FULFILL,1),(TYRE,,1),(IT,1),(OR,1)]'

您可以以任何方式使用生成的字数字典,如果您需要添加修改的原始字符串,那么修改函数以返回该值就足够简单了。你知道吗

相关问题 更多 >