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

в 21:26, , рубрики: python, wikipedia, ненормальное программирование, Питон, рекорды, слова, словари, метки: , , , , ,

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

Итак. Кладём в какую-нибудь папку файл 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)

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

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

слова

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

Дефисы сильно портят картину, хотя «шпионско-японо-немецко-троцкистско-вредительской» это конечно замечательно. Т.к. словарь составлялся два года назад, сейчас есть возможность проверить, было ли то или иное необычное слово проделкой хулиганов, это конкретное прилагательное — не было, оно и по сей день есть в статье про Кагановича Лазаря Моисеевича.

Но дефисы пожалуй уберу. Не буду издеваться над словарём, лучше его прибью и создам новый, без дефисов:

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

снова запускаем поиск длинных слов.

слова

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

Абсолютный рекордсмен — слово Тауматауакатангиангакоауауотаматеатурипукакапикимаунгахоронукупокануэнуакитанатаху, название небольшого холма в Новой Зеландии. Местные жители почему-то предпочитают сокращать название до Таумата. Второе слово из Википедии исчезло — вероятно ошибка или проделки хулиганов. Когда я ввёл третье слово — лланвайрпуллгвингиллгогерихуирндробуллллантисилиогогого, Википедия поинтересовалась — Возможно, вы имели в виду «лланвайрпуллгвингиллгогерихуирндробуллллантисилиогогогох»? Да! Именно лланвайрпуллгвингиллгогерихуирндробуллллантисилиогогогох я и имел в виду! Видимо слово изменилось, появилась более правильная транслитерация. Это название деревушки в Уэльсе. Дальше много названий всяких веществ, зубодробительные советские сокращения вроде верхневолжсксельэлектросетьстрой или просто случаи западанияклавишипробелуавторов.

Поищем длинные слова-палиндромы. Добавим фильтр в последний запрос:

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

слова

водоводов, водородов, монаханом, онснонсно, еееееееее, сологолос, монаганом, холомолох, разинизар, сунилинус, хххххххх, нооссоон, утилиту, анилина, тартрат, акасака, огопого, анисина, аникина, каанаак, имамами, апокопа, ротатор, отомото, кананак, ххххххх, гленелг, тененет, ателета, иииииии, ненонен, йониной, авелева, анапана, маркрам, равивар, арутура, ааааааа, мотетом, довывод, аракара, нэмтмэн, малялам, ававава, макакам, агубуга, монтном, ккккккк, калилак, претерп, дуунууд, тататат, мокиком, ооогооо, морером, киноник, атарата, нананан, пппвппп, массам, томмот, ниссин, реннер, реппер, саккас, моссом, келлек, семмес, моттом, кашшак, рессер, куккук, неккен, серрес, ноппон, киллик, хххххх, авеева, миллим, теннет, каллак, хаттах, моллом, каттак, меррем, типпит, каррак, наббан, пиррип, тиббит, саввас, птээтп, реммер, наннан, руллур, йонной, соссос, харрах, каммак, раннар

Погулял по ссылкам, узнал об озере Холомолох, а так же о плановом языке Сунилинус, языке, где каждое слово — палиндром. Также узнал, что самое длинное слово-палиндром — saippuakauppias, продавец мыла на финском. Со словом «онснонсно» интересно получилось, автор статьи про глицерин поленился переключить раскладку клавиатуры и написал формулу глицеринового альдегида кириллицей — СН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

Автор: gromozeka1980

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js