Создание пар частот слов, сохраняя оба слова и частоты - PullRequest
0 голосов
/ 07 октября 2019

У меня есть список пар слов на исландском языке, которые пишутся одинаково, но означают разные вещи (например, лейти и лейти, киркья и киркья). Список - это просто список элементов, а не список кортежей (поэтому просто [leyti, leiti, kyrkja, kirkja]). Я использую большой корпус, чтобы получить частоту каждого слова, так что я мог бы получить, например, лейти = частота 3000, лейти = частота 500 и т. Д. Я хочу сохранить эти пары при получении частоты из корпуса. В данный момент я перебираю список слов и сравниваю каждое слово со списком частот из большого корпуса, что приводит к появлению словаря f.ex. {leyti: 3000, leiti: 500} и т. д. Итак, в основном я делаю это:

def findfreq():
    freqdic = findfreq() # a dictionary with all the words in the corpus and their frequencies
    ywords = listofwords() # the list of words 
    yfreq = {} # resulting dictionary with the word from the wordlist and it's frequency as it is in the corpus
    for i in ywords:
        for key, value in freqdic.items():
            if i == key:
                yfreq[i] = value
    return yfreq

Но я не хочу просто словарь со всеми словами по отдельности, я хочу что-то (кортеж?)это представляет пару с обеими частотами (например: (лейти: 3000, лейти: 500), (киркья: 400, киркья: 600)). Как я могу это сделать?

1 Ответ

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

Даже с вашим текущим решением вам не нужно каждый раз проходить итерацию по всему freqdic, вам нужно одно значение из него. Вы можете просто сделать:

for i in ywords:
    yfreq[i] = freqdic[i]

Если вы хотите, чтобы слова вместе с их частотами в кортежах, вы можете просто сделать что-то вроде этого:

def findfreq():
    freqdic = findfreq()
    ywords = listofwords()
    return [(w, freqdic[w]) for w in ywords]

Вы вещь, которая обращается ккортеж с индексом будет слишком загроможден, вы можете использовать namedtuple:

from collections import namedtuple
Word = namedtuple('Word', ['form', 'frequency'])

def findfreq():
    freqdic = findfreq()
    return [Word(w, freqdic[w]) for w in listofwords()]

Затем вы можете получить доступ к полям с точечной нотацией как w.form и w.frequency.

...