字符串中最频繁出现的数字的频率

时间:2019-08-12 13:55:02

标签: python text-processing

让我们假设我有一个这样的字符串:

sentence = 'I am 6,571.5 14 a 14 data 1,a211 43.2 scientist 1he3'

我希望将字符串中最频繁出现的频率作为输出。

在上面的字符串中,这是2,它对应于字符串中最常见的数字14

当我说数字时,我的意思是只包含数字和,.的东西,并且用空格分隔。

因此,在唯一的数字上方的字符串是:6,571.5141443.2

(请注意,不同的国家/地区会以相反的方式使用,.来表示小数和千位,因此我要考虑所有这些可能的情况)

如何有效地做到这一点?

PS

有趣的是,发现Python中没有(非常)快速的方法来测试单词是否为数字(包括有关,.的不同约定的整数和浮点数)。

1 个答案:

答案 0 :(得分:1)

您可以尝试:

from collections import Counter
import re

pattern = '\s*?\d+[\,\.]\d+[\,\.]\d+\s*?|\s*?\d+[\,\.]\d+\s*?|\s[0-9]+\s'
sentence = 'I am 6,571.5 14 a 14 data 1,a211 43.2 scientist 1he3'
[(_ , freq)] = Counter(re.findall(pattern, sentence)).most_common(1)
print(freq)

# output: 2

或者您可以使用:

def simple(w):
    if w.isalpha():
        return False

    if w.isnumeric():
        return True

    if w.count('.') > 1 or w.count(',') > 1:
        return False

    if w.startswith('.') or w.startswith(','):
        return False

    if w.replace(',', '').replace('.', '').isnumeric():
        return True

    return False

[(_ , freq)] = Counter([w for w in sentence.split() if simple(w)]).most_common(1)
print(freq)

# output: 2

但是第二种解决方案要慢大约2倍

相关问题