2017-02-07 17 views
0

Код ниже, генерирует словари рассола для униграмм книг Google. Он генерирует 26 словарей, таких как словарь слов, начинающихся с a, b, c, ..., z.Создайте униграммы из книг Google, которые начинаются с числа, с использованием regex

p = re.compile(r'^[a-z]*$', re.IGNORECASE) 
el = 'abcdefghijklmnopqrstuvwxyz' 

for l in el: 
    fname, url, records = next(readline_google_store(ngram_len=1, indices=l)) 
    unigrams = {} 
    count = 0 
    for r in records: 
     if (r.year >=2000): 
      w = r.ngram.lower() 
      if p.match(w): 
       if w in unigrams: 
        unigrams[w] += np.array([r.match_count, r.volume_count]) 
       else: 
        unigrams[w] = np.array([r.match_count, r.volume_count]) 
    with open(str(l)+'_unigram_dict.pickle', 'w') as f: 
     pickle.dump(unigrams, f) 

Выход как {'word':[total_match_count, total_volume_count]}

Я хочу, чтобы изменить его, чтобы иметь только словарь слов, которые начинаются с цифры. Регулярное выражение должно ловить шаблон, начинающийся с числа (от 0 до 9), за которым следует любой символ. Я пробовал re.compile(r'^(?:\d*\.)?\d+$', re.IGNORECASE), но он только ловит числовые слова. Он не отражает такие слова, как: "00161_VERB" или "002,200_NUM" или "01-73" и т.д.

Edit: вход (запись) в этом формате:

ngram TAB year TAB match_count TAB page_count NEWLINE 

Я хочу выход будет словарем с ключевым ngrams, которые начинаются с «0» и значения списка [ «суммы match_count на протяжении многих лет», «суммой PAGE_COUNT за года»], как это:

{'ngrams':['sum of match_count over the years', 'sum of page_count over the years']} 
+0

Дайте входные данные и требуемые выходы, которые включают в себя выбросы, которые вы не можете поймать. Это поможет нам ответить на вопрос лучше =) – alvas

+0

Попробуйте просто 're.compile (r '^ \ d')'. –

+0

'' 're.compile (r '^ \ d')' '' не записывает ngrams, как '002,200_NUM' – Elm662

ответ