Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Существует ли программа, составляющая алфавитный спис

Автор Максимм, июля 5, 2012, 12:42

0 Пользователи и 1 гость просматривают эту тему.

Максимм

Существует ли программа, составляющая алфавитный список слов (словарь) заданного текста?
----------------
алфавитный
заданный
ли
программа
словарь
слово
составляющий
список
существует
текст
Думали, что садимся в лодку к Мазаю, а оказалось - к Герасиму.

Bhudh

Скрипт на любом языке программирования.
Причём в куче языков уже есть функция сортировки по дефолту, так что всё, что делает скрипт: это загоняет слова в массив или ещё куда...
Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Hellerick

В одном из моих любимых текстовых редакторов RulNote есть функция build wordlist. Правда, он сортирует их по частотности, но расставить слова по алфавиту — это еще пара кликов.

Vertaler

1. Автозамена все знаки препинания > ноль.
2. Автозамена пробел > перенос строки.
3. Копируем в эксель, кликаем и радуемся.
Стрч прст в крк и вынь сухим.

Bhudh

Пиши, что думаешь, но думай, что пишешь.
MONEŌ ERGŌ MANEŌ.
Waheeba dokin ʔebi naha.
«каждый пост в интернете имеет коэффициент бреда» © Невский чукчо

Rachtyrgin

Недавно разбирал такой программкой капуанскую черепицу для ostapenkovr. Программка на яве, небольшая, строк этак 20...
Всякому остановленному фашисту для захвата его в плен можешь еще крикнуть:
«Хэндэ хох!» (Руки вверх!)
«Вафи хинлеги!» (Бросай оружие!)
«Абгезэсен!» (Слезай! — С машины, с лошади, с повозки.)
Если фашист не сразу исполняет твое приказание, крикни грознее и добавь:
«Бай флухтфэрзух вирт гэшози!» (Побежишь — буду стрелять!)
А. Афанасьев. В помощь партизану. Москва, 1942 г.

Тайльнемер

Прочитайте начальное сообщение внимательнее. Кажется, автору темы нужно ещё и имена в начальную форму ставить:

заданного → заданный
слов → слово
составляющая → составляющий
заданного → заданный
текста → текст


(Однако, не глаголы: существует → существует)

Так что скриптом в пару строчек тут не обойтись.

Rachtyrgin

Может, товарищу нужен лемматизатор? Типа лемматизатора Алексея Сокирко?
Всякому остановленному фашисту для захвата его в плен можешь еще крикнуть:
«Хэндэ хох!» (Руки вверх!)
«Вафи хинлеги!» (Бросай оружие!)
«Абгезэсен!» (Слезай! — С машины, с лошади, с повозки.)
Если фашист не сразу исполняет твое приказание, крикни грознее и добавь:
«Бай флухтфэрзух вирт гэшози!» (Побежишь — буду стрелять!)
А. Афанасьев. В помощь партизану. Москва, 1942 г.

Python

Написать программу, разбивающую текст на слова и сортирующую их в алфавитном порядке — несложно. На Clojure это будет примерно так:

(->> (slurp "inputfile.txt") ; чтение файла
     (re-seq #"\p{L}+") ; поиск последовательностей букв
     set sort ; исключение дубликатов и сортировка
     (reduce #(str %1 "\n" %2)) ; объединить слова в текст, разбитый на строчки
     (spit "outputfile.txt")) ; запись в файл


Но, я так понял, нужно еще и угадывать, как слово будет выглядеть в начальной грамматической форме? Вторую часть осуществить практически невозможно: если брать чисто по внешнему виду, программа будет постоянно кровать и батареть, да и если использовать словарь (хотя какой словарь, если мы его не составили?), возможны ошибки на омонимах в косвенных падежах (напр., пирог в родительном и пиро́га в именительном пишутся идентично).
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

wangjhenbai

Цитата: Python от июля  6, 2012, 06:09
хотя какой словарь, если мы его не составили?
А почему обязательно «мы»?

Цитата: http://speakrus.ru/dict/
Полная акцентуированная парадигма по А. А. Зализняку
86839 статей, 2645347 форм
TXT + RAR (5961 Кб) Скачать
Источник   Образец текста
Идея и программное обеспечение (С) Андрей Усачёв (2:5100/87), 2004

Ещё можно использовать (LW) mystem от Яндекса, но а) в последнее время возможность его скачивания убрали (или я плохо искал?), б) он выдаёт результат в несколько нестандартном виде (так, он объединяет некоторые переходные и непереходные глаголы).

Вообще, конечно, автоматическое приведение к словарной форме неизбежно будет выдавать ошибочные варианты, но если помнить об этом, оно всё-таки будет достаточно полезно. Оставляю за Пѵѳономъ написание программы на Clojure, которая ещё и приводит всё к начальной форме.

Кстати, думаю, Максимму кроме самой программы нужна будет и инструкция по работе с ней. ;D
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

wangjhenbai

Цитата: Python от июля  6, 2012, 06:09
(re-seq #"\p{L}+") ; поиск последовательностей букв
Цитата: http://clojuredocs.org/clojure_core/clojure.core/re-seqReturns a lazy sequence of successive matches of pattern in string, using java.util.regex.Matcher.find(), each such match processed with re-groups.
Цитироватьlazy sequence
Вот когда я начинаю завидовать клоџурщикам...

Конечно, такое можно сделать и в Scheme, но не сделали же...
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

Python

Цитата: wangjhenbai от июля  6, 2012, 09:40
Цитата: Python от июля  6, 2012, 06:09
(re-seq #"\p{L}+") ; поиск последовательностей букв
Цитата: http://clojuredocs.org/clojure_core/clojure.core/re-seqReturns a lazy sequence of successive matches of pattern in string, using java.util.regex.Matcher.find(), each such match processed with re-groups.
Цитироватьlazy sequence
Вот когда я начинаю завидовать клоџурщикам...
В нашем случае, lazy-sequence сразу же прокручивается через set и sort, поэтому от laziness здесь пользы никакой.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Максимм

Большое спасибо за отклик на мой вопрос и конструктивные советы. Насчёт перевода в начальную форму. Да, наверное, было бы рационально переводить в начальную форму. Глагол в моём примере я должен был поставить тоже в инфинитив. Как-то пропустил и не сделал этого.
Зачем это нужно. Берёшь книгу на языке, который учишь. Вставляешь текст.  Программа выкидывает на выходе словарик всех слов, употреблённых в данном тексте (книге). Дальше просматриваешь этот словарик, замечаешь слова, которых ещё не знаешь, справляешься в электронном словаре о значении. Дальше можно спокойно читать книгу, не отвлекаясь.
Мне кажется, так было бы удобно.
P.S. Да хотя бы и не переводить в начальную форму, сойдёт и без этого. Лишь бы убрать все словарные повторы, а остаток превратить в форму списка.
Думали, что садимся в лодку к Мазаю, а оказалось - к Герасиму.

Rachtyrgin

Цитата: Максимм от июля  6, 2012, 21:26
Да хотя бы и не переводить в начальную форму, сойдёт и без этого. Лишь бы убрать все словарные повторы, а остаток превратить в форму списка.

Это как раз то, что делает моя программка. Шлите исходный текст для эксперимента...
Всякому остановленному фашисту для захвата его в плен можешь еще крикнуть:
«Хэндэ хох!» (Руки вверх!)
«Вафи хинлеги!» (Бросай оружие!)
«Абгезэсен!» (Слезай! — С машины, с лошади, с повозки.)
Если фашист не сразу исполняет твое приказание, крикни грознее и добавь:
«Бай флухтфэрзух вирт гэшози!» (Побежишь — буду стрелять!)
А. Афанасьев. В помощь партизану. Москва, 1942 г.

shell

Цитата: Python от июля  6, 2012, 06:09
Написать программу, разбивающую текст на слова и сортирующую их в алфавитном порядке — несложно. На Clojure это будет примерно так:

(->> (slurp "inputfile.txt") ; чтение файла
     (re-seq #"\p{L}+") ; поиск последовательностей букв
     set sort ; исключение дубликатов и сортировка
     (reduce #(str %1 "\n" %2)) ; объединить слова в текст, разбитый на строчки
     (spit "outputfile.txt")) ; запись в файл

Too long, too ugly. The best solution:

tr -c '[:alpha:]' '\n' < text | sort -u > wordlist

wangjhenbai

Цитата: Максимм от июля  6, 2012, 21:26
P.S. Да хотя бы и не переводить в начальную форму, сойдёт и без этого. Лишь бы убрать все словарные повторы, а остаток превратить в форму списка.
Как раз это и делает программа Python'а, которую он привёл выше. :yes:
Если я кому-то нужен, д м игрек м д собака яндекс точка ру.

Python

Цитата: shell от июля  8, 2012, 13:24
tr -c '[:alpha:]' '\n' < text | sort -u > wordlist

I've just tested it in Cygwin. It is good for basic ASCII, but Cyrillic letters are not :alpha:, so they're skipped too.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Python

Цитата: Python от июля  8, 2012, 14:12
Цитата: shell от июля  8, 2012, 13:24
tr -c '[:alpha:]' '\n' < text | sort -u > wordlist

I've just tested it in Cygwin. It is good for basic ASCII, but Cyrillic letters are not :alpha:, so they're skipped too.
Cyrillic-compatible solution:
cat text | tr '[\000-\100\133-\140\173-\177]' '\n' | sort -u >wordlist
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Тайльнемер

Цитата: Python от июля  8, 2012, 17:27
Cyrillic-compatible solution:
Code: [Select]cat text | tr '[\000-\100\133-\140\173-\177]' '\n' | sort -u >wordlist
А unicode-compatible solution-то есть?

Python

Цитата: Тайльнемер от июля  8, 2012, 18:59
А unicode-compatible solution-то есть?
Clojure позволяет работать с юникодом, в т.ч. и в регексах (в первом примере \p{L} — поиск всех символов, определенных в юникоде как буквы). Впрочем, мой вариант для юниксовых утилит должен работать и с юникодом, при условии, что в тексте используется только ascii-совместимая пунктуация.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр