Как кодировать результат поиска слова, чтобы посчитать количество вхождений слова - PullRequest
2 голосов
/ 24 октября 2019

Я пытаюсь подсчитать количество вхождений слов в списке. Мне нужно, чтобы результат был (word, # of occurrence), однако я продолжаю получать (word, 1) (word, 2) (word,3), когда он должен давать мне (word,3).

Все переменные library, document и dictionary определены в другой области.

Я считаю, что мой код на 99% правильный, но результат не соответствует тому, что янужно это

def (word_search) : 
    results = [] 

    search_word = dictionary [0]

    for search_word in dictionary: 

    count = 0 

    for document in library: 

       for word in document: 

          if search_word == word : 

            count = count + 1

            results.append((word,count)) 

     return (results) 

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

возможно, вам нужно идентифицировать после цикла:

results = [] 

search_word = dictionary [0]

for search_word in dictionary: 

   count = 0 

   for document in library: 

      for word in document: 

         if search_word == word : 

           count = count + 1

           results.append((word,count)) 

 return (results) 
0 голосов
/ 24 октября 2019

Как насчет попробовать решение, которое использует Python dict (отличается от вашего словаря переменных)? На самом деле, существует действительно изящная версия python dict, предоставляемая Python, называемая defaultdict, которую можно инициализировать определенным значением, если ключ не существует.

Вы могли бы написать что-то вроде этого:

from collections import defaultdict

def (word_search) : 
    results = defaultdict(int) # Make the dict use integers as the default entry value, set it to 0 if key does not exist

    search_word = dictionary [0]

    for search_word in dictionary: 

       for document in library: 

           for word in document: 

               if search_word == word : 

                   results[word] += 1 # Increment the count for the matched word


    return results.items() # Return the counts as a set of tuples

Это приведет к набору кортежей, содержащих счетчик каждого слова!

Примечание: Я исправил отступ для циклов for тоже, в случае, если это вызывало проблему


Кроме того, чтобы повысить эффективность, вы можете произвести подсчет всех слов и просто получить количество ваших поисковых слов в конце, тем самым снизив сложность с O (n ^ 3) до O (n ^ 2). ):

from collections import defaultdict

def (word_search) : 
    counts = defaultdict(int) # Make the dict use integers as the default entry value, set it to 0 if key does not exist
    for document in library: 

       for word in document: 

           counts[word] += 1 # Increment the count the given word

    # Loop through and extract just the counts of the words you're interested in
    results = []

    for search_word in dictionary: 
        results.append((search_word, counts[search_word]))

    return results

Это должно значительно сократить время выполнения, если ваши документы очень большие!

0 голосов
/ 24 октября 2019

Это потому, что results - это список кортежей, и вы продолжаете добавлять значения к нему всякий раз, когда вы находите вхождение нового слова. return (results[-1]) должно работать, но есть более простой способ написать эту функцию без использования списка. Я дам вам понять, так как вы все еще учитесь :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...