Найти - Пользователи
Полная версия: Создать словарь на лету из файла
Начало » Python для новичков » Создать словарь на лету из файла
1
sanodin
Есть толковый словарь русского языка в текстовом файле
пытаюсь создать словарь при чтении из файла, где ключом служит слово , а значением его толкование
# -*- coding: utf-8 -*-
from collections import defaultdict
with open('modernen.txt') as fi: 
    text = fi.read()
D = defaultdict(list)
sp = text.split()
for i in sp:    
    if i.isupper():
        key = i
    D[key].append(i)
                   
#print (D)
словарь создается но много ошибок и немного не не то чего хотелось бы

текст в файле:
   АБАЖУР м. франц. косой навесец на свет, на свечу, лампу  для  затина
навесец, тенник, затин, щиток, колпак,  козырек     косые  проемы  для
окон, сверху вниз, окно откосом.
   АБАЗ, АБАС м. кавк. персидская серебряная монета, около  20  коп.   
Восковой  шарик  от   церковной   свечи,   привешиваемый   закавказскими
христианами, в знак  обета,  к  шее  или  пясти.  Абаза  ж.  черноморск.
жестокий восточный ветер, от кавказского берега, опасный  для  дунайских
рыбаков.   Бран. бестолковый басурманин. Эх вы, абаза немая!   Конское
тавро, известное на Кавказе, вероятно, от названия горского племени.
хотелось бы конечно выкинуть немного лишнего текста, создать краткий словарь, но главное создать этот словарь типа
{"ДАВЫДОВСКИЙ": 'ДАВЫДОВСКИЙ Ипполит Васильевич 1887  1968 российский патолог основатель научной школы Труды по патологической анатомии инфекционных болезней атеросклероза старения по общей патологии' 
        "БАБУР": 'БАБУР Захиреддин Мухаммед 1483  1530 основатель государства Великих Моголов потомок Тимура Первоначально правитель удела в Средней Азии затем в Кабуле' }
py.user.next
sanodin
пытаюсь создать словарь при чтении из файла, где ключом служит слово
для начала упрости словарь
для таких словарей нужно составлять грамматику, а потом по ней записывать реализацию

sanodin
sp = text.split()
for i in sp:    
    if i.isupper():
        key = i
    D[key].append(i)
это всё наивное школоло - такое простое не прокатит

сначала надо определить алфавит, символы которого являются лексемами
потом составить грамматику, которая задаёт язык этого словаря (порождает множество допустимых цепочек символов над алфавитом)
потом для грамматики составлять конечный автомат

есть там модуль какой-то, который автоматически уже всё делает
sanodin
Делаю по простому
# -*- coding: utf-8 -*-
from collections import defaultdict
import sys
with open('modernen.txt') as fi: 
    text = fi.readlines()
D = defaultdict(list)
DT = defaultdict(list)
for i in text:
        i = i.split()
        #print (i)
        try:
            if i[0].isupper():
                key = i[0]
                #print (key)
            for y in i:
                
                D[key].append(y)
        except: pass
for key in D:
    #print(key, D[key])
    val = D[key]
    val = ' '.join(val)
    DT[key].append(val)
sys.stdout = open("out4.txt", "w")
print (DT)
все равно есть огрехи, правлю ручками если что не так
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB