Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Охота на слова

Anna | 16.06.2014 | нет комментариев

Продолжу цикл статей «Как развлечь себя при помощи частотного словаря Википедии и интерпретатора Питона, если ничего иного под рукой нет и в ближайшее время не предвидится».
Я испробую воссоздать тот восхитительный вечер, когда мой парсер Википедии отработал, я получил вожделенный словарь, открыл Питон в интерактивном режиме и начал вводить разные запросы с целью получить слова со каждыми странными свойствами. Тот, двухлетней давности, сеанс работы с шеллом, к сожалению, не сохранился, следственно сделаю всё снова.

Выходит. Кладём в какую-нибудь папку файл wiki_freq.txt, открываем в этой папке питоновский шелл. Поехали.
Для начала загрузим словарь:

>>> import codecs
>>> d={}
>>> for l in codecs.open("wiki_freq.txt","r","utf-8-sig"):
	w,f=l.split()
	d[w]=int(f)

И испробуем что-нибудь вовсе примитивное, скажем получить самые длинные слова. Выведем предисловие списка всех слов словаря отсортированных по длине в обратном порядке (если длина 2-х слов совпадает, они сортируются по частотности):

>>> print ', '.join(sorted(d.keys(),key=lambda w:(len(w),d[w]),reverse=True)[:100])

 

слова

пори-икаалинен-куру-вилпула-лянкипохья-падасйоки-хейнола-мантюхарью-савитайпале-лаппенранта-антреа-раута, рига-земитаны-чиекуркалнс-югла-балтэзерс-ропажи-криевупе-вангажи-инчукалнс-еглюпе-силциемс-сигулда, петрозаводск-шала-медвежьегорск-повенец-кондопога-кижи-валаам-ленинград-петрозаводск, тауматауакатангиангакоауауотаматеатурипукакапикимаунгахоронукупокануэнуакитанатаху, бронебойный-осколочный-бронебойный-осколочный-бронебойный-осколочный-трассирующий, мариуполь-волноваха-донецк-авдеевка-чаплино-синельниково-екатеринослав-пятихатки, батурино-ракино-дышкин-заденки-степальково-касели-чешихино-поехнова-козлина, михайловский-севск-дмитровск-кромы-нарышкино-орёл-новосиль-борки-косторное, российско-грузинско-германско-нидерландско-итальянско-финляндский, ультравысокотехнологичный-неуничтожимый-супер-космо-кибер-костюм, комсомольский-московский-ленинградский-марковцева-комсомольский, геленджик-анапа-тоннельная-убинская-новодмитриевская-геленджик, тула-горбачево-белёв-козельск-сухиничи-козельск-черепеть-тула, копенгаген-гамбург-бремен-дортмунд-франкфурт-штутгарт-цюрих, метионил-глутамил-гистидил-фенилаланил-пролил-глицил-пролин, муха-мура-тура-тара-пара-парк-паук-паут-плут-плот-слот-слон, тсиви-тсиви-тсиви-тсиви-висс-висс-висс-твисс-висс-висс-цирр, треонил-лизил-пролил-аргинил-пролил-глицил-пролил-диацетат, октября-трамвайная-невского-нежинская-космонавтов-пушкина, белая-васильковая-жёлтая-красная-жёлтая-васильковая-белая, рехбергер-этелявуори-койвусаари-холопайнен-каллио-йоутсен, принцмармабюкпетральбертгансиосифбернхардтвильгельмсберг, лланвайрпуллгвингиллгогерихуирндробуллллантисилиогогого, рок-реггей-поп-панк-латино-романтик-хип-хап-шансон-угар, кузьминки-мишуково-козельское-инютино-ермолино-лапшинка, метилфенилтиометил-диметиламинометил-гидроксиброминдол, тауматауакатангиангакоауауотаматеапокануэнуакитанатаху, вашингтон-лондон-копенгаген-стокгольм-хельсинки-москва, очередного-перспективно-отменного-сенатора-как-его-там, вилья-де-нуэстра-сеньора-де-ла-канделария-де-медельин, красноярск-киренск-якутск-нагаево-нижнеколымск-уэлен, пижанка-мари-ошаево-ахманово-воя-пайгишево-казаково, георг-александр-михаил-фридрих-вильгельм-франц-карл, альметьевско-бугульминско-лениногорско-азнакаевской, самара-волгоград-ростов-астрахань-элиста-буденновск, гидразинокарбонилметилбромфенилдигидробенздиазепин, сверхленинградско-петербургско-академики-либерала, спасо-елеазаров-великопустынский-трехсвятительский, мирадор-мирамар-солер-центр-плазарио-отэй-аэродром, аргинил-альфа-аспартил-лизил-валил-тирозил-аргинин, адам-карл-вильгельм-станислав-евгений-павел-людвиг, харьков-лозовая-александровск-перекоп-севастополь, муха-мура-фура-фора-кора-корн-коан-клан-клон-слон, брянско-стародубско-трубчевско-новгород-северском, фа-минор-ля-бемоль-мажор-си-бемоль-мажор-фа-минор, станционной-маркса-оранжерейной-бахарова-переулку, ростов-на-дону-владивосток-сан-франциско-нью-йорк, муха-муза-луза-лоза-поза-пора-порт-сорт-стон-слон, дубоссары-карантин-кошница-дороцкое-григориополь, шпионско-японо-немецко-троцкистско-вредительской, гидрокарбонат-хлорид-натрий-кальций-магнезиевые, украинско-крымскотатарско-российско-белорусский, вакамайя-сильва-марадона-мария-нина-санчес-рахт, понсно» увлекательно получилось, автор статьи про глицерин поленился переключить раскладку клавиатуры и написал формулу глицеринового альдегида кириллицей — СН2ОНСНОНСНО (так оно до сих пор там и лежит, невооружённым глазом разницы не видно) а мой парсер воспринял двойку как разграничитель.

Поищем слова-анаграммы.

Для начала составим вспомогательный словарь анаграмм, поставим порог встречаемости 20, Дабы гарантированно отсечь каждый мусор (с длинными словами и палиндромами я не мог этого сделать, т.к. эти слова экстраординарно редчайшие):

>>> from collections import defaultdict
>>> anagrams = defaultdict(list)
>>> for k in d:
	if d[k]>20: anagrams[''.join(sorted(k))].append(k)

И ищем 10 самых крупных комплектов анаграмм:

>>> for l in sorted(anagrams.values(), key=len, reverse=True)[:10]:
	print ', '.join(l)
анаграммы

доран, ардон, дорна, родан, нодар, андро, народ, дрона, радон, дарон, ронда, нардо, одран, норад
ирка, рика, арки, раки, икра, акри, ирак, кира, кари, икар, каир, арик
вране, арвен, равен, аврен, правильна, нарве, авнер, нарев, нерва, варне, реван, варен
риан, инар, нари, иран, раин, анри, арин, рина, наир, рани, арни
мерка, марек, марке, ермак, мраке, камер, крема, рекам, краем, карме, рамке
анкор, нокра, карон, коран, крона, норка, акрон, ранко, ранок, карно, краон
сатир, ситар, расти, тирас, сирта, сарти, триас, тарис, траси, ритас, истра
круа, рука, арку, раку, каур, урка, акру, кару, укра, урак, кура
сектор, корсет, рокетс, окрест, костре, костер, строке, кортес, стокер, строек, кресто
нуар, нару, урна, руна, нура, рану, уран, наур, руан, арун, арну

А так же комплекты анаграмм со словами максимальной длины:

>>> for k in sorted([k for k in anagrams if len(anagrams[k])>1],
		key=len, reverse=True)[:10]:
	print ', '.join(anagrams[k])
анаграммы

короткометражек, короткометражке
астрологические, реалистического
охарактеризовал, характеризовало
психопатологии, патопсихологии
онтологические, неолитического
олигархическое, археологически
топологические, типологическое
изотермические, изометрические
кинологической, онкологический
остроградского, страгородского

Ищем слова, в которых все буквы различные, вновь изменяем всё ту же многострадальную строчку. теснее начинаю сожалеть, что не сделал из неё функцию:

>>> print ', '.join(sorted([k for k in d if len(set(k))==len(k)],key=lambda w:(len(w),d[w]),reverse=True)[:100])
слова

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

Идей ещё море, а время позднее… Если обитателям програ статья понравится, напишу вторую часть. Если есть идеи увлекательных запросов к словарю, пишите в комментарии либо в собственные сообщения, а я переведу их в код и опубликую выданные итоги.

P.S. Частотный словарь по бывшему тут — yadi.sk/d/cRHJvinF7Vt8w

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB