Как проверить, сколько раз термин встречался в списке и его частоту?

#python #python-3.x #string #list #function

#питон #python-3.x #строка #Список #функция

Вопрос:

text=["duran duran sang wild boys in 1984","wild boys don't remain forever wild","who brought wild flowers","it was john krakauer who wrote in to the wild"]

Например, в этом списке "duran" содержится 1 предложение и встречается 2 раза в text[0]

Для отдельных кодов первый вывод должен быть 1 , а второй вывод должен быть 2

Я пробовал функции с .count и .check , но не смог создать правильный код.

Комментарии:

1. Что вы подразумеваете под «Для отдельных кодов первый вывод должен быть 1, а второй вывод должен быть 2»?

2. @np8 существуют отдельные коды первый код должен выводить количество предложений, в которых содержится слово (например: дюран в 1 предложении) второй код должен выводить частоту слов в предложении(предложениях) (например: второй код собирает информацию о том, что дюран в 1-м предложении и проверяет, сколько «дюран»в этом предложении, которое равно 2)

Ответ №1:

Этот код подсчитывает все вхождения a word во всех строках списка списков l , а также возвращает количество элементов списка, содержащих это word .

 text=["duran duran sang wild boys in 1984","wild boys don't remain forever wild","who brought wild flowers","it was john krakauer who wrote in to the wild"]  def countInListOfLists(l, word):  counts = [s.count(word) for s in l]  return sum([1 for c in counts if c gt; 0]), sum(counts)  print(countInListOfLists(text, "duran"))  

Выход:

 (1,2)  

Комментарии:

1. как мне сделать так, чтобы это повторилось для этого вывода ? def get_unique_words(a): посещено = установить() uniq = [] для слова в.разделить(): если слово не посещено: uniq.добавить(слово) посещено.добавить(слово) вернуть uniq def get_unique_words_from_list_of_strings(str_list): вернуть get_unique_words(‘ ‘.присоединиться(str_list)) words_in_order = get_unique_words_from_list_of_strings(текст) печать(слова в порядке)

2. Чтобы уточнить: во-первых, вы хотите подать get_unique_words заявку на каждый список, l а затем хотите подсчитать?

3. countInListOfLists нужно применять text к каждому слову words_in_order без моего ввода print(countInListOfLists(текст, «»)) каждый раз

4. Я не использовал вашу функцию, но вы можете сделать что-то вроде этого: uniqueText = set((" ".join(text)).split(" ")) print([countInListOfLists(text, word) for word in uniqueText]) . (a set не содержит дубликатов по дизайну)

Ответ №2:

Вы можете сделать это как один лайнер —

 wordCount = len([word for word in (' ').join(text).split(' ') if word == 'duran'])  

Ответ №3:

вы можете выполнить это с помощью следующего кода.

 # check how many times a term has occurred in a list and its frequency def count_occurrences(lst, term):  return lst.count(term)  # check the frequency of term in a list def frequency(lst, term):  return count_occurrences(lst, term) / len(lst)  

Кроме того, я предполагаю, что вы заранее разделите элементы списка, чтобы создать список слов, а не список предложений, что добавляет сложности. В противном случае см. Ответ @CLRW97.

Разделите свой список на слова:

 # split list of sentences into list of words def split_sentences(lst):  return ' '.join(lst).split()  

В результате в вашем распоряжении будут три чистые функции:

 # split list of sentences into list of words def split_sentences(lst):  return ' '.join(lst).split()  # check how many times a term has occurred in a list and its frequency def count_occurrences(lst, term):  lst = split_sentences(lst)  return lst.count(term)  # check the frequency of term in a list def frequency(lst, term):  lst = split_sentences(lst)  return count_occurrences(lst, term) / len(lst)  text=["duran duran sang wild boys in 1984","wild boys don't   remain forever wild","who brought wild flowers","it was john krakauer who wrote in to the wild"]  print(count_occurrences(text, "duran")) print(frequency(text, "duran"))  gt; 2 gt; 0.07407407407407407  

Однако для получения более простого ответа ознакомьтесь с ответом @DannyMoshe, который также кажется довольно разумным. Мой просто разбит на несколько функций, чтобы сделать код более понятным, а также снизить его сложность за счет использования встроенных/простых функций Python.