Подсчитайте частоту каждого слова моего списка в заданной строке - PullRequest
0 голосов
/ 17 апреля 2019

Я хочу суммировать количество частот каждого слова в моем списке в строке.Как я могу сделать ?Подробности:

list = ['Apple', 'Mango' ,'Orange','p[éeêè]t[s]' ]
text = 'I have Apple and mood today, This morning i ate mango and pret then Orange'

В этом случае я хочу вернуть 4.

Ответы [ 4 ]

0 голосов
/ 17 апреля 2019

Вы можете преобразовать текст в список, а затем перебрать каждое слово в этом списке. Увеличьте счетчик, если в вашем списке есть слово:

words = ['Apple', 'Mango', 'Orange' ]
text = 'I have Apple and Mango mood today, This morning i ate Mango and then Orange'

textlist = text.split(" ")  # split text to words;
counter = 0
for word in textlist:
    if word in words:
        counter+=1 
print(counter)

Выход:

4

Добавлен следующий код для удаления запятой и точек в конце слов:

textlist = text.split(" ")
print(textlist)
counter = 0
for word in textlist:
    if word[-1] in [',','.']:  # if last character is comma or period
        word = word[:-1]       # remove last character
    if word in words:
        counter+=1 
print(counter)
0 голосов
/ 17 апреля 2019

Попробуйте:

import re
len([word for word in text.split() if any(re.match(pattern, word) for pattern in list)])
0 голосов
/ 17 апреля 2019

Вы можете получить frequency каждого слова, используя dict comprehsnion, И затем, sum values, чтобы получить общее количество,

>>> list_
['Apple', 'Mango', 'Orange']
>>> text
'I have Apple and Mango mood today, This morning i ate Mango and then Orange'
>>> y = {x: text.count(x) for x in list_}
>>> y
{'Orange': 1, 'Mango': 2, 'Apple': 1}
>>> sum(y.values())
4

После того, как вопросы изменены, вам нужно что-то вроде этого,

>>> import re
>>> list_ = ['Apple', 'Mango' ,'Orange', 'pr[éeêè]t[s]?' ]
>>> text
'I have Apple and mood today, This morning i ate mango and pret then Orange'
>>> re.findall(r'|'.join(list_), text)
['Apple', 'pret', 'Orange']
>>> len(re.findall(r'|'.join(list_), text))
3

А если вам нужен frequencies каждого word, то используйте Counter из модуля collections,

>>> from collections import Counter
>>> Counter(re.findall(r'|'.join(list_), text))
Counter({'Orange': 1, 'pret': 1, 'Apple': 1})

И для случая insensitive Поиск,

>>> Counter(re.findall(r'|'.join(list_).lower(), text.lower()))
Counter({'orange': 1, 'pret': 1, 'mango': 1, 'apple': 1})
>>> d = Counter(re.findall(r'|'.join(list_).lower(), text.lower()))
>>> sum(d.values())
4
0 голосов
/ 17 апреля 2019

Вы можете использовать от str.count до sum с выражением генератора.

>>> words = ['Apple', 'Mango', 'Orange' ]
>>> text = 'I have Apple and Mango mood today, This morning i ate Mango and then Orange'
>>> sum(text.count(word) for word in words)
4
...